diff --git a/package-lock.json b/package-lock.json index 94c097b56..507a8feca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -93,6 +93,7 @@ "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -2400,6 +2401,7 @@ "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.18.0", @@ -2434,6 +2436,7 @@ "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/types": "7.18.0", @@ -2644,6 +2647,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3216,6 +3220,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001737", "electron-to-chromium": "^1.5.211", @@ -4224,6 +4229,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -4289,6 +4295,7 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -4345,6 +4352,7 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -6271,6 +6279,7 @@ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -8169,6 +8178,7 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -9399,9 +9409,9 @@ } }, "node_modules/tar-fs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", - "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9961,6 +9971,7 @@ "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/src/app.ts b/src/app.ts index 9b80e6a4e..7ee933383 100755 --- a/src/app.ts +++ b/src/app.ts @@ -17,6 +17,7 @@ import info from './cli/info/info'; import journey from './cli/journey/journey'; import log from './cli/log/log'; import mapping from './cli/mapping/mapping'; +import node from './cli/node/node'; import oauth from './cli/oauth/oauth'; import promote from './cli/promote/promote'; import realm from './cli/realm/realm'; @@ -73,6 +74,7 @@ const { initTokenCache } = frodo.cache; program.addCommand(journey()); await program.addCommand(log()); program.addCommand(mapping()); + program.addCommand(node()); program.addCommand(oauth()); program.addCommand(promote()); program.addCommand(realm()); diff --git a/src/cli/config/config-import.ts b/src/cli/config/config-import.ts index a466a39ee..a999b50c3 100644 --- a/src/cli/config/config-import.ts +++ b/src/cli/config/config-import.ts @@ -49,6 +49,12 @@ export default function setup() { 'Create new UUIDs for the scripts upon import. Use this to duplicate scripts or create a new versions of the same scripts.' ).default(false, 'off') ) + .addOption( + new Option( + '--re-uuid-custom-nodes', + 'Create new UUIDs for the custom nodes upon import. Use this to duplicate custom nodes or create a new versions of the same custom nodes.' + ).default(false, 'off') + ) .addOption( new Option( '-d, --default', @@ -118,6 +124,7 @@ export default function setup() { const outcome = await importEverythingFromFile(options.file, { reUuidJourneys: options.reUuidJourneys, reUuidScripts: options.reUuidScripts, + reUuidCustomNodes: options.reUuidCustomNodes, cleanServices: options.clean, includeDefault: options.default, includeActiveValues: options.includeActiveValues, @@ -140,6 +147,7 @@ export default function setup() { const outcome = await importEverythingFromFiles({ reUuidJourneys: options.reUuidJourneys, reUuidScripts: options.reUuidScripts, + reUuidCustomNodes: options.reUuidCustomNodes, cleanServices: options.clean, includeDefault: options.default, includeActiveValues: options.includeActiveValues, @@ -156,6 +164,7 @@ export default function setup() { { reUuidJourneys: options.reUuidJourneys, reUuidScripts: options.reUuidScripts, + reUuidCustomNodes: options.reUuidCustomNodes, cleanServices: options.clean, includeDefault: options.default, includeActiveValues: options.includeActiveValues, diff --git a/src/cli/node/node-delete.ts b/src/cli/node/node-delete.ts new file mode 100644 index 000000000..b0101afec --- /dev/null +++ b/src/cli/node/node-delete.ts @@ -0,0 +1,61 @@ +import { Option } from 'commander'; + +import { getTokens } from '../../ops/AuthenticateOps'; +import { deleteCustomNode, deleteCustomNodes } from '../../ops/NodeOps'; +import { printMessage, verboseMessage } from '../../utils/Console'; +import { FrodoCommand } from '../FrodoCommand'; + +export default function setup() { + const program = new FrodoCommand('frodo node delete'); + + program + .description('Delete custom nodes.') + .addOption( + new Option( + '-i, --node-id ', + 'Custom node id or service name. If specified, only one custom node is deleted and the options -n, -a and -A are ignored.' + ) + ) + .addOption( + new Option( + '-n, --node-name ', + 'Custom node display name. If specified, only one custom node is deleted and the options -a and -A are ignored.' + ) + ) + .addOption( + new Option('-a, --all', 'Delete all custom nodes. Ignored with -i or -n.') + ) + .action(async (host, realm, user, password, options, command) => { + command.handleDefaultArgsAndOpts( + host, + realm, + user, + password, + options, + command + ); + if ((options.nodeId || options.nodeName) && (await getTokens())) { + verboseMessage( + `Deleting custom node ${options.nodeName ? options.nodeName : options.nodeId}...` + ); + const outcome = await deleteCustomNode( + options.nodeId, + options.nodeName + ); + if (!outcome) process.exitCode = 1; + } else if (options.all && (await getTokens())) { + verboseMessage(`Deleting all custom nodes...`); + const outcome = await deleteCustomNodes(); + if (!outcome) process.exitCode = 1; + } else { + printMessage( + 'Unrecognized combination of options or no options...', + 'error' + ); + program.help(); + process.exitCode = 1; + } + }); + + return program; +} diff --git a/src/cli/node/node-describe.ts b/src/cli/node/node-describe.ts new file mode 100644 index 000000000..0474e36eb --- /dev/null +++ b/src/cli/node/node-describe.ts @@ -0,0 +1,50 @@ +import { Option } from 'commander'; + +import { getTokens } from '../../ops/AuthenticateOps'; +import { describeCustomNode } from '../../ops/NodeOps'; +import { printMessage, verboseMessage } from '../../utils/Console'; +import { FrodoCommand } from '../FrodoCommand'; + +export default function setup() { + const program = new FrodoCommand('frodo node describe'); + + program + .description('Describe custom nodes.') + .addOption( + new Option('-i, --node-id ', 'Custom node id or service name.') + ) + .addOption( + new Option('-n, --node-name ', 'Custom node display name.') + ) + .addOption(new Option('--json', 'Output in JSON format.')) + .action(async (host, realm, user, password, options, command) => { + command.handleDefaultArgsAndOpts( + host, + realm, + user, + password, + options, + command + ); + if (await getTokens()) { + verboseMessage( + `Describing custom node ${options.nodeName ? options.nodeName : options.nodeId}...` + ); + const outcome = await describeCustomNode( + options.nodeId, + options.nodeName, + options.json + ); + if (!outcome) process.exitCode = 1; + } else { + printMessage( + 'Unrecognized combination of options or no options...', + 'error' + ); + program.help(); + process.exitCode = 1; + } + }); + + return program; +} diff --git a/src/cli/node/node-export.ts b/src/cli/node/node-export.ts new file mode 100644 index 000000000..5ebeabc8b --- /dev/null +++ b/src/cli/node/node-export.ts @@ -0,0 +1,116 @@ +import { Option } from 'commander'; + +import { getTokens } from '../../ops/AuthenticateOps'; +import { + exportCustomNodesToFile, + exportCustomNodesToFiles, + exportCustomNodeToFile, +} from '../../ops/NodeOps'; +import { printMessage, verboseMessage } from '../../utils/Console'; +import { FrodoCommand } from '../FrodoCommand'; + +export default function setup() { + const program = new FrodoCommand('frodo node export'); + + program + .description('Export custom nodes.') + .addOption( + new Option( + '-i, --node-id ', + 'Custom node id or service name. If specified, only one custom node is exported and the options -n, -a and -A are ignored.' + ) + ) + .addOption( + new Option( + '-n, --node-name ', + 'Custom node display name. If specified, only one custom node is exported and the options -a and -A are ignored.' + ) + ) + .addOption(new Option('-f, --file ', 'Name of the export file.')) + .addOption( + new Option( + '-a, --all', + 'Export all custom nodes to a single file. Ignored with -i or -n.' + ) + ) + .addOption( + new Option( + '-A, --all-separate', + 'Export all custom nodes to separate files (*.nodeTypes.json) in the current directory. Ignored with -i, -n, or -a.' + ) + ) + .addOption( + new Option( + '-N, --no-metadata', + 'Does not include metadata in the export file.' + ) + ) + .addOption( + new Option( + '-x, --extract', + 'Extract the script from the exported file, and save it to a separate file. Ignored with -a.' + ) + ) + .action(async (host, realm, user, password, options, command) => { + command.handleDefaultArgsAndOpts( + host, + realm, + user, + password, + options, + command + ); + // export by id or name + if ((options.nodeId || options.nodeName) && (await getTokens())) { + verboseMessage( + `Exporting custom node ${options.nodeId || options.nodeName}...` + ); + const outcome = await exportCustomNodeToFile( + options.nodeId, + options.nodeName, + options.file, + options.metadata, + options.extract, + { + useStringArrays: true, + } + ); + if (!outcome) process.exitCode = 1; + } + // --all -a + else if (options.all && (await getTokens())) { + verboseMessage(`Exporting all custom nodes to a single file...`); + const outcome = await exportCustomNodesToFile( + options.file, + options.metadata, + { + useStringArrays: true, + } + ); + if (!outcome) process.exitCode = 1; + } + // --all-separate -A + else if (options.allSeparate && (await getTokens())) { + verboseMessage('Exporting all custom nodes to separate files...'); + const outcome = await exportCustomNodesToFiles( + options.metadata, + options.extract, + { + useStringArrays: true, + } + ); + if (!outcome) process.exitCode = 1; + } + // unrecognized combination of options or no options + else { + printMessage( + 'Unrecognized combination of options or no options...', + 'error' + ); + program.help(); + process.exitCode = 1; + } + }); + + return program; +} diff --git a/src/cli/node/node-import.ts b/src/cli/node/node-import.ts new file mode 100644 index 000000000..a4f3d5079 --- /dev/null +++ b/src/cli/node/node-import.ts @@ -0,0 +1,113 @@ +import { Option } from 'commander'; + +import { getTokens } from '../../ops/AuthenticateOps'; +import { + importCustomNodeFromFile, + importCustomNodesFromFile, + importCustomNodesFromFiles, + importFirstCustomNodeFromFile, +} from '../../ops/NodeOps'; +import { printMessage, verboseMessage } from '../../utils/Console'; +import { FrodoCommand } from '../FrodoCommand'; + +export default function setup() { + const program = new FrodoCommand('frodo node import'); + program + .description('Import custom nodes.') + .addOption( + new Option( + '-i, --node-id ', + 'Custom node id or service name. If specified, only one custom node is imported and the options -n, -a and -A are ignored.' + ) + ) + .addOption( + new Option( + '-n, --node-name ', + 'Custom node display name. If specified, only one custom node is imported and the options -a and -A are ignored.' + ) + ) + .addOption(new Option('-f, --file ', 'Name of the file to import.')) + .addOption( + new Option( + '-a, --all', + 'Import all custom nodes from single file. Ignored with -i or -n.' + ) + ) + .addOption( + new Option( + '-A, --all-separate', + 'Import all custom nodes from separate files (*.nodeTypes.json) in the current directory. Ignored with -i, -n, or -a.' + ) + ) + .addOption( + new Option( + '--re-uuid', + 'Re-UUID. Create a new UUID (and service name) for the custom node upon import. Use this to duplicate a custom node or create a new version of the same custom node. Note that you must also choose a new display name using -n/--node-name to avoid import errors.' + ).default(false, 'false') + ) + .action(async (host, realm, user, password, options, command) => { + command.handleDefaultArgsAndOpts( + host, + realm, + user, + password, + options, + command + ); + // import by id or name + if ( + (options.nodeId || options.nodeName) && + options.file && + (await getTokens()) + ) { + verboseMessage( + `Importing custom node ${options.nodeId || options.nodeName}...` + ); + const outcome = await importCustomNodeFromFile( + options.nodeId, + options.nodeName, + options.file, + { + reUuid: options.reUuid, + } + ); + if (!outcome) process.exitCode = 1; + } + // --all -a + else if (options.all && options.file && (await getTokens())) { + verboseMessage( + `Importing all custom nodes from a single file (${options.file})...` + ); + const outcome = await importCustomNodesFromFile(options.file, { + reUuid: options.reUuid, + }); + if (!outcome) process.exitCode = 1; + } + // --all-separate -A + else if (options.allSeparate && (await getTokens())) { + verboseMessage('Importing all custom nodes from separate files...'); + const outcome = await importCustomNodesFromFiles({ + reUuid: options.reUuid, + }); + if (!outcome) process.exitCode = 1; + } + // import first node in file + else if (options.file && (await getTokens())) { + verboseMessage('Importing first custom node in file...'); + const outcome = await importFirstCustomNodeFromFile(options.file, { + reUuid: options.reUuid, + }); + if (!outcome) process.exitCode = 1; + } + // unrecognized combination of options or no options + else { + printMessage( + 'Unrecognized combination of options or no options...', + 'error' + ); + program.help(); + process.exitCode = 1; + } + }); + return program; +} diff --git a/src/cli/node/node-list.ts b/src/cli/node/node-list.ts new file mode 100644 index 000000000..0bc7c6b5a --- /dev/null +++ b/src/cli/node/node-list.ts @@ -0,0 +1,39 @@ +import { Option } from 'commander'; + +import { getTokens } from '../../ops/AuthenticateOps'; +import { listCustomNodes } from '../../ops/NodeOps'; +import { verboseMessage } from '../../utils/Console'; +import { FrodoCommand } from '../FrodoCommand'; + +export default function setup() { + const program = new FrodoCommand('frodo node list'); + + program + .description('List custom nodes.') + .addOption( + new Option('-l, --long', 'Long with all fields.').default(false, 'false') + ) + .action( + // implement command logic inside action handler + async (host, realm, user, password, options, command) => { + command.handleDefaultArgsAndOpts( + host, + realm, + user, + password, + options, + command + ); + if (await getTokens()) { + verboseMessage(`Listing all custom nodes`); + const outcome = await listCustomNodes(options.long); + if (!outcome) process.exitCode = 1; + } else { + process.exitCode = 1; + } + } + // end command logic inside action handler + ); + + return program; +} diff --git a/src/cli/node/node.ts b/src/cli/node/node.ts new file mode 100644 index 000000000..16712656e --- /dev/null +++ b/src/cli/node/node.ts @@ -0,0 +1,24 @@ +import { FrodoStubCommand } from '../FrodoCommand'; +import DeleteCmd from './node-delete.js'; +import DescribeCmd from './node-describe.js'; +import ExportCmd from './node-export.js'; +import ImportCmd from './node-import.js'; +import ListCmd from './node-list.js'; + +export default function setup() { + const program = new FrodoStubCommand('node').description( + 'Manage custom nodes.' + ); + + program.addCommand(ListCmd().name('list')); + + program.addCommand(DescribeCmd().name('describe')); + + program.addCommand(ExportCmd().name('export')); + + program.addCommand(ImportCmd().name('import')); + + program.addCommand(DeleteCmd().name('delete')); + + return program; +} diff --git a/src/ops/ConfigOps.ts b/src/ops/ConfigOps.ts index 3e3350819..a3f902e13 100644 --- a/src/ops/ConfigOps.ts +++ b/src/ops/ConfigOps.ts @@ -7,6 +7,7 @@ import { FullRealmExportInterface, } from '@rockcarver/frodo-lib/types/ops/ConfigOps'; import { SyncSkeleton } from '@rockcarver/frodo-lib/types/ops/MappingOps'; +import { CustomNodeExportInterface } from '@rockcarver/frodo-lib/types/ops/NodeOps'; import { ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps'; import fs from 'fs'; @@ -19,6 +20,7 @@ import { cleanupProgressIndicators, printError } from '../utils/Console'; import { saveServersToFiles } from './classic/ServerOps'; import { ManagedSkeleton, writeManagedJsonToDirectory } from './IdmOps'; import { writeSyncJsonToDirectory } from './MappingOps'; +import { extractCustomNodeScriptsToFiles } from './NodeOps'; import { extractScriptsToFiles } from './ScriptOps'; import { errorHandler } from './utils/OpsUtils'; @@ -303,6 +305,9 @@ export function exportItem( name = (value.parentPath.substring(1) + name).replaceAll('/', '-'); } } + if (type === 'nodeTypes') { + name = value.displayName; + } const filename = getTypedFilename( // Server information has an id of *, which is not an allowed file name character in windows name ? name : id === '*' ? 'information' : id, @@ -314,6 +319,12 @@ export function exportItem( id, `${baseDirectory.substring(getWorkingDirectory(false).length + 1)}/${fileType}` ); + } else if (extract && type === 'nodeTypes') { + extractCustomNodeScriptsToFiles( + exportData as CustomNodeExportInterface, + id, + `${baseDirectory.substring(getWorkingDirectory(false).length + 1)}/${fileType}` + ); } if (!fs.existsSync(`${baseDirectory}/${fileType}`)) { fs.mkdirSync(`${baseDirectory}/${fileType}`); @@ -343,6 +354,7 @@ export async function importEverythingFromFile( options: FullImportOptions = { reUuidJourneys: false, reUuidScripts: false, + reUuidCustomNodes: false, cleanServices: false, includeDefault: false, includeActiveValues: false, @@ -368,6 +380,7 @@ export async function importEverythingFromFiles( options: FullImportOptions = { reUuidJourneys: false, reUuidScripts: false, + reUuidCustomNodes: false, cleanServices: false, includeDefault: false, includeActiveValues: false, @@ -390,6 +403,7 @@ export async function importEntityfromFile( options: FullImportOptions = { reUuidJourneys: false, reUuidScripts: false, + reUuidCustomNodes: false, cleanServices: false, includeDefault: false, includeActiveValues: false, diff --git a/src/ops/NodeOps.ts b/src/ops/NodeOps.ts index b22155193..483c816e1 100644 --- a/src/ops/NodeOps.ts +++ b/src/ops/NodeOps.ts @@ -1,11 +1,54 @@ -import { frodo } from '@rockcarver/frodo-lib'; +import { frodo, FrodoError } from '@rockcarver/frodo-lib'; import { + CustomNodeSkeleton, + type CustomNodeUsage, type InnerNodeRefSkeletonInterface, type NodeRefSkeletonInterface, type NodeSkeleton, } from '@rockcarver/frodo-lib/types/api/NodeApi'; +import { + type CustomNodeExportInterface, + type CustomNodeExportOptions, + type CustomNodeImportOptions, +} from '@rockcarver/frodo-lib/types/ops/NodeOps'; +import { Table } from 'cli-table3'; +import fs from 'fs'; + +import { extractDataToFile, getExtractedData } from '../utils/Config'; +import { + createKeyValueTable, + createProgressIndicator, + createTable, + debugMessage, + printError, + printMessage, + stopProgressIndicator, + updateProgressIndicator, +} from '../utils/Console'; +import { isScriptExtracted } from './ScriptOps'; +import { errorHandler } from './utils/OpsUtils'; +import wordwrap from './utils/Wordwrap'; -const { getNodeClassification: _getNodeClassification } = frodo.authn.node; +const { + getNodeClassification: _getNodeClassification, + readCustomNode, + readCustomNodes, + getCustomNodeUsage, + exportCustomNode, + exportCustomNodes, + importCustomNodes, + deleteCustomNode: _deleteCustomNode, + deleteCustomNodes: _deleteCustomNodes, +} = frodo.authn.node; +const { + getTypedFilename, + saveToFile, + saveJsonToFile, + getFilePath, + getWorkingDirectory, +} = frodo.utils; + +const { stringify } = frodo.utils.json; /** * Get node classification @@ -129,3 +172,577 @@ export function getTableRowMd( }\` |`; return row; } + +/** + * List custom nodes + * @param {boolean} [long=false] detailed list + * @returns {Promise} true if successful, false otherwise + */ +export async function listCustomNodes(long: boolean = false): Promise { + try { + const nodes = await readCustomNodes(); + if (long) { + const table = createTable([ + 'Display Name', + 'Id (-1)', + 'Journeys', + 'Instances', + 'Error Outcome', + 'Description', + ]); + for (const node of nodes) { + const usage = await getCustomNodeUsage(node._id); + let numJourneys = 0; + let numInstances = 0; + for (const realmJourneys of Object.values(usage)) { + for (const journeyInstances of Object.values(realmJourneys)) { + numJourneys += 1; + numInstances += journeyInstances.length; + } + } + table.push([ + wordwrap(node.displayName, 25, ' '), + node._id, + numJourneys ? String(numJourneys)['brightGreen'] : '0'['brightRed'], + numInstances ? String(numInstances)['brightGreen'] : '0'['brightRed'], + node.errorOutcome + ? 'enabled'['brightGreen'] + : 'disabled'['brightRed'], + wordwrap(node.description, 30), + ]); + } + printMessage(table.toString(), 'data'); + } else { + nodes.forEach((node) => { + printMessage(`${node.displayName}`, 'data'); + }); + } + return true; + } catch (error) { + printError(error, `Error listing custom nodes`); + } + return false; +} + +/** + * Describe a custom node + * @param {string} nodeId custom node id + * @param {string} nodeName custom node name + * @param {boolean} json output description as json. Default: false + * @returns {Promise} true if successful, false otherwise + */ +export async function describeCustomNode( + nodeId: string, + nodeName: string, + json = false +): Promise { + try { + const node = (await readCustomNode( + nodeId, + nodeName + )) as CustomNodeSkeleton & { + locations: CustomNodeUsage; + }; + node.locations = await getCustomNodeUsage(node._id); + if (json) { + printMessage(node, 'data'); + return true; + } + const nodeTable = createKeyValueTable(); + nodeTable.push(['Id'['brightCyan'], node._id]); + nodeTable.push(['Service Name'['brightCyan'], node.serviceName]); + nodeTable.push(['Display Name'['brightCyan'], node.displayName]); + nodeTable.push(['Description'['brightCyan'], node.description]); + getTableRowsFromArray(nodeTable, 'Inputs', node.inputs); + getTableRowsFromArray(nodeTable, 'Outputs', node.outputs); + const outcomes = node.outcomes; + if (node.errorOutcome) outcomes.push('Script Error'); + getTableRowsFromArray(nodeTable, 'Outcomes', outcomes); + getTableRowsFromArray(nodeTable, 'Tags', node.tags); + getTableRowsFromArray( + nodeTable, + 'Locations', + buildTreeOutput(node.locations) + ); + printMessage(nodeTable.toString(), 'data'); + printMessage('\nProperties', 'data'); + for (const [name, prop] of Object.entries(node.properties)) { + const propTable = createKeyValueTable(); + propTable.push(['Name'['brightCyan'], name]); + propTable.push(['Title'['brightCyan'], prop.title]); + propTable.push(['Description'['brightCyan'], prop.description]); + propTable.push([ + 'Required'['brightCyan'], + prop.required ? 'true'['brightGreen'] : 'false'['brightRed'], + ]); + propTable.push(['Type'['brightCyan'], prop.type]); + propTable.push([ + 'Multivalued'['brightCyan'], + prop.multivalued ? 'true'['brightGreen'] : 'false'['brightRed'], + ]); + if (prop.defaultValue) { + getTableRowsFromArray( + propTable, + 'Default Value', + stringify(prop.defaultValue).split('\n') + ); + } + if (prop.options) { + getTableRowsFromArray( + propTable, + 'Options', + Object.entries(prop.options).map(([k, v]) => `${k} (${v})`) + ); + } + printMessage('\n' + propTable.toString(), 'data'); + } + return true; + } catch (error) { + printError(error); + } + return false; +} + +/** + * Export custom node to file + * @param {string} nodeId custom node id + * @param {string} nodeName custom node name + * @param {string} file file name + * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true + * @param {boolean} extract extracts the scripts from the exports into separate files if true. Default: false + * @param {CustomNodeExportOptions} options export options + * @returns {Promise} true if successful, false otherwise + */ +export async function exportCustomNodeToFile( + nodeId: string, + nodeName: string, + file: string, + includeMeta: boolean = true, + extract: boolean = false, + options: CustomNodeExportOptions = { + useStringArrays: true, + } +): Promise { + const name = nodeName ? nodeName : nodeId; + const indicatorId = createProgressIndicator( + 'determinate', + 1, + `Exporting ${name}...` + ); + try { + const exportData = await exportCustomNode(nodeId, nodeName, options); + if (!file) { + file = getTypedFilename(nodeName ? nodeName : nodeId, 'nodeTypes'); + } + const filePath = getFilePath(file, true); + if (extract) + extractCustomNodeScriptsToFiles( + exportData, + undefined, + undefined, + !!nodeName + ); + updateProgressIndicator(indicatorId, `Saving ${name} to ${filePath}...`); + saveJsonToFile(exportData, filePath, includeMeta); + stopProgressIndicator( + indicatorId, + `Exported custom node ${name} to file`, + 'success' + ); + return true; + } catch (error) { + stopProgressIndicator( + indicatorId, + `Error exporting custom node ${name} to file`, + 'fail' + ); + printError(error); + } + return false; +} + +/** + * Export all custom nodes to file + * @param {string} file file name + * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true + * @param {CustomNodeExportOptions} options export options + * @returns {Promise} true if successful, false otherwise + */ +export async function exportCustomNodesToFile( + file: string, + includeMeta: boolean = true, + options: CustomNodeExportOptions = { + useStringArrays: true, + } +): Promise { + try { + const exportData = await exportCustomNodes(options); + if (!file) { + file = getTypedFilename(`allCustomNodes`, 'nodeTypes'); + } + saveJsonToFile(exportData, getFilePath(file, true), includeMeta); + return true; + } catch (error) { + printError(error, `Error exporting custom nodes to file`); + } + return false; +} + +/** + * Export all custom nodes to separate files + * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true + * @param {boolean} extract extracts the scripts from the exports into separate files if true. Default: false + * @param {CustomNodeExportOptions} options export options + * @returns {Promise} true if successful, false otherwise + */ +export async function exportCustomNodesToFiles( + includeMeta: boolean = true, + extract: boolean = false, + options: CustomNodeExportOptions = { + useStringArrays: true, + } +): Promise { + try { + const exportData = await exportCustomNodes(options); + if (extract) extractCustomNodeScriptsToFiles(exportData); + for (const customNode of Object.values(exportData.nodeTypes)) { + saveToFile( + 'nodeTypes', + customNode, + '_id', + getFilePath( + getTypedFilename(customNode.displayName, 'nodeTypes'), + true + ), + includeMeta + ); + } + return true; + } catch (error) { + printError(error, `Error exporting custom nodes to files`); + } + return false; +} + +/** + * Import a custom node from file + * @param {string} nodeId custom node id + * @param {string} nodeName custom node name + * @param {string} file import file name + * @param {CustomNodeImportOptions} options import options + * @returns {Promise} true if successful, false otherwise + */ +export async function importCustomNodeFromFile( + nodeId: string, + nodeName: string, + file: string, + options: CustomNodeImportOptions = { + reUuid: false, + } +): Promise { + let indicatorId: string; + try { + indicatorId = createProgressIndicator( + 'indeterminate', + 0, + 'Reading custom node...' + ); + const importData = getCustomNodeExportFromFile(getFilePath(file)); + updateProgressIndicator(indicatorId, 'Importing custom node...'); + await importCustomNodes( + nodeId, + nodeName, + importData, + options, + errorHandler + ); + stopProgressIndicator( + indicatorId, + `Successfully imported custom node ${nodeName ? nodeName : nodeId}.`, + 'success' + ); + return true; + } catch (error) { + stopProgressIndicator( + indicatorId, + `Error importing custom node ${nodeName ? nodeName : nodeId}`, + 'fail' + ); + printError(error); + } + return false; +} + +/** + * Import custom nodes from file + * @param {String} file file name + * @param {CustomNodeImportOptions} options import options + * @returns {Promise} true if successful, false otherwise + */ +export async function importCustomNodesFromFile( + file: string, + options: CustomNodeImportOptions = { + reUuid: false, + } +): Promise { + try { + debugMessage(`importCustomNodesFromFile: start`); + debugMessage(`importCustomNodesFromFile: importing ${file}`); + const importData = getCustomNodeExportFromFile(getFilePath(file)); + await importCustomNodes( + undefined, + undefined, + importData, + options, + errorHandler + ); + debugMessage(`importCustomNodesFromFile: end`); + return true; + } catch (error) { + printError(error, `Error importing custom nodes from file`); + } + return false; +} + +/** + * Import all custom nodes from separate files + * @param {CustomNodeImportOptions} options import options + * @returns {Promise} true if successful, false otherwise + */ +export async function importCustomNodesFromFiles( + options: CustomNodeImportOptions = { + reUuid: false, + } +): Promise { + const errors: Error[] = []; + try { + const names = fs.readdirSync(getWorkingDirectory()); + const customNodeFiles = names.filter((name) => + name.toLowerCase().endsWith('.nodetypes.json') + ); + for (const file of customNodeFiles) { + try { + await importCustomNodesFromFile(file, options); + } catch (error) { + errors.push( + new FrodoError(`Error importing custom nodes from ${file}`, error) + ); + } + } + if (errors.length > 0) { + throw new FrodoError(`One or more errors importing custom nodes`, errors); + } + return true; + } catch (error) { + printError(error, `Error importing custom nodes from files`); + } + return false; +} + +/** + * Import first custom node from file + * @param {string} file import file name + * @param {CustomNodeImportOptions} options import options + * @returns {Promise} true if successful, false otherwise + */ +export async function importFirstCustomNodeFromFile( + file: string, + options: CustomNodeImportOptions = { + reUuid: false, + } +): Promise { + let indicatorId: string; + try { + indicatorId = createProgressIndicator( + 'indeterminate', + 0, + 'Importing custom node...' + ); + const importData = getCustomNodeExportFromFile(getFilePath(file)); + const ids = Object.keys(importData.nodeTypes); + if (ids.length === 0) + throw new FrodoError(`No custom nodes found in import data`); + const firstNode = importData.nodeTypes[ids[0]]; + await importCustomNodes( + firstNode._id, + firstNode.displayName, + importData, + options, + errorHandler + ); + stopProgressIndicator( + indicatorId, + `Imported custom node from ${file}`, + 'success' + ); + return true; + } catch (error) { + stopProgressIndicator( + indicatorId, + `Error importing custom node from ${file}`, + 'fail' + ); + printError(error); + } + return false; +} + +/** + * Delete custom node + * @param {string} nodeId custom node id + * @param {string} nodeName custom node name + * @returns {Promise} true if successful, false otherwise + */ +export async function deleteCustomNode( + nodeId: string, + nodeName: string +): Promise { + const spinnerId = createProgressIndicator( + 'indeterminate', + undefined, + `Deleting ${nodeName ? nodeName : nodeId}...` + ); + try { + await _deleteCustomNode(nodeId, nodeName); + stopProgressIndicator( + spinnerId, + `Deleted ${nodeName ? nodeName : nodeId}.`, + 'success' + ); + return true; + } catch (error) { + stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail'); + printError(error); + } + return false; +} + +/** + * Delete custom nodes + * @returns {Promise} true if successful, false otherwise + */ +export async function deleteCustomNodes(): Promise { + const spinnerId = createProgressIndicator( + 'indeterminate', + undefined, + `Deleting custom nodes...` + ); + try { + await _deleteCustomNodes(errorHandler); + stopProgressIndicator(spinnerId, `Deleted custom nodes.`, 'success'); + return true; + } catch (error) { + stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail'); + printError(error); + } + return false; +} + +/** + * Get a custom node export from json file. + * + * @param file The path to the custom node export file + * @returns The custom node export + */ +export function getCustomNodeExportFromFile( + file: string +): CustomNodeExportInterface { + const exportData = JSON.parse( + fs.readFileSync(file, 'utf8') + ) as CustomNodeExportInterface; + for (const node of Object.values(exportData.nodeTypes)) { + if (!isScriptExtracted(node.script)) { + continue; + } + const scriptRaw = getExtractedData( + node.script as string, + file.substring(0, file.lastIndexOf('/')) + ); + node.script = scriptRaw.split('\n'); + } + return exportData; +} + +/** + * Extracts scripts from a custom node export into separate files. + * @param {CustomNodeExportInterface} exportData The script export + * @param {string} nodeId The custom node id to extract a specific script from. If undefined, will extract scripts from all custom nodes. + * @param {string} directory The directory within the base directory to save the script files + * @param {boolean} useNameForFiles True to name files using custom node display names, false to use id's instead. Default: true + * @returns {boolean} true if successful, false otherwise + */ +export function extractCustomNodeScriptsToFiles( + exportData: CustomNodeExportInterface, + nodeId?: string, + directory?: string, + useNameForFiles: boolean = true +): boolean { + try { + const nodes = nodeId + ? [exportData.nodeTypes[nodeId]] + : Object.values(exportData.nodeTypes); + for (const node of nodes) { + const scriptFileName = getTypedFilename( + useNameForFiles ? node.displayName : node.serviceName, + 'nodeTypes', + 'js' + ); + const scriptText = Array.isArray(node.script) + ? node.script.join('\n') + : node.script; + node.script = extractDataToFile(scriptText, scriptFileName, directory); + } + return true; + } catch (error) { + printError(error); + } + return false; +} + +/** + * Helper that gets multiple rows for a table for array data + * @param table The table to push the rows to + * @param rowName The name of the first row + * @param array The array of data + */ +function getTableRowsFromArray( + table: Table, + rowName: string, + array: string[] +): void { + table.push([rowName['brightCyan'], array.length > 0 ? array[0] : '']); + for (let i = 1; i < array.length; ++i) { + table.push(['', array[i]]); + } +} + +/** + * Helper that builds an array of lines to print a tree to the console + */ +function buildTreeOutput( + data: string | object, + prefix = '', + isFirst = true +): string[] { + if (typeof data !== 'object' || data === null) return [prefix + String(data)]; + if ( + Array.isArray(data) && + data.every((v) => typeof v !== 'object' || v === null) + ) { + return Object.values(data).map((v, i, arr) => { + const isLast = i === arr.length - 1; + return prefix + (isLast ? '└── ' : '├── ') + String(v); + }); + } + return Object.entries(data).flatMap(([k, v], i, arr) => { + const isLast = i === arr.length - 1; + return [ + ...[isFirst ? k : prefix + (isLast ? '└── ' : '├── ') + k], + ...buildTreeOutput( + v, + isFirst ? '' : prefix + (isLast ? ' ' : '│ '), + false + ), + ]; + }); +} diff --git a/src/ops/PromoteOps.ts b/src/ops/PromoteOps.ts index 432e5183e..f0dce43ea 100644 --- a/src/ops/PromoteOps.ts +++ b/src/ops/PromoteOps.ts @@ -31,6 +31,7 @@ import { } from './IdmOps'; import { deleteJourney, importJourneyFromFile } from './JourneyOps'; import { deleteMapping, importMappingFromFile } from './MappingOps'; +import { deleteCustomNode, importCustomNodeFromFile } from './NodeOps'; import { deleteOauth2ClientById, importOAuth2ClientFromFile, @@ -654,6 +655,38 @@ async function addSwitch( logmessages.push(' '); break; } + case 'nodeTypes': { + if (importFilePath.endsWith('.js')) { + verboseMessage(importFilePath); + verboseMessage( + 'this is a script file, we will not import it as a custom node file,' + + 'but will import the config and that should import the script as well\n' + ); + logmessages.push(importFilePath); + logmessages.push( + 'this is a script file, we will not import it as a custom node file,' + + 'but will import the config and that should import the script as well\n' + ); + logmessages.push(' '); + break; + } + const node = getJsonObjectTwoDown(importFilePath); + verboseMessage(`custom node display name: ${node.displayName}`); + verboseMessage(`custom node id: ${node._id}`); + const outcome = await importCustomNodeFromFile( + node._id, + node.displayName, + importFilePath, + { + reUuid: false, + } + ); + logmessages.push(`add custom node ${importFilePath}`); + verboseMessage(`add custom node ${importFilePath}\n`); + logmessages.push(`outcome: ${outcome}`); + logmessages.push(' '); + break; + } // todo: need to determine how to get the compare to work properly case 'secret': { if (effectSecrets) { @@ -984,6 +1017,32 @@ async function deleteSwitch( verboseMessage(`delete idm ${deleteFilePath}\n`); break; } + case 'nodeTypes': { + if (deleteFilePath.endsWith('.js')) { + verboseMessage(deleteFilePath); + verboseMessage( + 'this is a script file, we will not delete it as a custom node file,' + + 'but will delete the config and that should delete the script as well\n' + ); + logmessages.push(deleteFilePath); + logmessages.push( + 'this is a script file, we will not delete it as a custom node file,' + + 'but will delete the config and that should delete the script as well\n' + ); + logmessages.push(' '); + break; + } + const node = getJsonObjectTwoDown(deleteFilePath); + verboseMessage( + `Deleting custom node ${node._id} in realm "${state.getRealm()}"...` + ); + const outcome = await deleteCustomNode(node._id, node.displayName); + logmessages.push(`delete custom node ${deleteFilePath}`); + logmessages.push(`outcome: ${outcome}`); + logmessages.push(' '); + verboseMessage(`delete custom node ${deleteFilePath}\n`); + break; + } // todo: Currently secrets when exported are hashed so it needs to be thought of more case 'secret': { if (effectSecrets) { diff --git a/src/ops/ScriptOps.ts b/src/ops/ScriptOps.ts index 7ac1f1922..2c12e78f5 100644 --- a/src/ops/ScriptOps.ts +++ b/src/ops/ScriptOps.ts @@ -467,7 +467,7 @@ export function extractScriptsToFiles( return false; } -function isScriptExtracted(script: string | string[]): boolean { +export function isScriptExtracted(script: string | string[]): boolean { debugMessage(`Cli.ScriptOps.isScriptExtracted: start`); let extracted = false; if (Array.isArray(script)) { diff --git a/src/utils/Config.ts b/src/utils/Config.ts index 38349baab..7c55a8927 100644 --- a/src/utils/Config.ts +++ b/src/utils/Config.ts @@ -11,6 +11,7 @@ import os from 'os'; import { readServersFromFiles } from '../ops/classic/ServerOps'; import { getManagedObjectsFromFiles } from '../ops/IdmOps'; import { getLegacyMappingsFromFiles } from '../ops/MappingOps'; +import { getCustomNodeExportFromFile } from '../ops/NodeOps'; import { getScriptExportByScriptFile } from '../ops/ScriptOps'; import { errorHandler } from '../ops/utils/OpsUtils'; import { printMessage } from './Console'; @@ -156,6 +157,9 @@ export async function getConfig( const jsonFiles = files.filter((f) => f.path.endsWith('.json')); const samlFiles = jsonFiles.filter((f) => f.path.endsWith('.saml.json')); const scriptFiles = jsonFiles.filter((f) => f.path.endsWith('.script.json')); + const customNodefiles = jsonFiles.filter((f) => + f.path.endsWith('.nodeTypes.json') + ); const serverFiles = jsonFiles.filter( (f) => f.path.endsWith('.server.json') && @@ -165,6 +169,7 @@ export async function getConfig( (f) => !f.path.endsWith('.saml.json') && !f.path.endsWith('.script.json') && + !f.path.endsWith('.nodeTypes.json') && !f.path.endsWith('.server.json') && !f.path.endsWith('/sync.idm.json') && !f.path.endsWith('sync.json') && @@ -249,6 +254,19 @@ export async function getConfig( (exportConfig as FullRealmExportInterface).script[id] = script; }); } + // Handle extracted custom node scripts + if ( + customNodefiles.length > 0 && + !(exportConfig as FullGlobalExportInterface).nodeTypes + ) { + (exportConfig as FullGlobalExportInterface).nodeTypes = {}; + } + for (const f of customNodefiles) { + const nodeExport = getCustomNodeExportFromFile(f.path); + Object.entries(nodeExport.nodeTypes).forEach(([id, node]) => { + (exportConfig as FullGlobalExportInterface).nodeTypes[id] = node; + }); + } } /** diff --git a/test/client_cli/en/__snapshots__/config-import.test.js.snap b/test/client_cli/en/__snapshots__/config-import.test.js.snap index f1b55e7e6..5bb1d091c 100644 --- a/test/client_cli/en/__snapshots__/config-import.test.js.snap +++ b/test/client_cli/en/__snapshots__/config-import.test.js.snap @@ -96,6 +96,10 @@ Options: (choices: "classic", "cloud", "forgeops") --no-cache Disable token cache for this operation. + --re-uuid-custom-nodes Create new UUIDs for the custom nodes + upon import. Use this to duplicate + custom nodes or create a new versions of + the same custom nodes. (default: off) --re-uuid-journeys Generate new UUIDs for all journey nodes during import. (default: off) --re-uuid-scripts Create new UUIDs for the scripts upon diff --git a/test/client_cli/en/__snapshots__/node-delete.test.js.snap b/test/client_cli/en/__snapshots__/node-delete.test.js.snap new file mode 100644 index 000000000..452aa41e6 --- /dev/null +++ b/test/client_cli/en/__snapshots__/node-delete.test.js.snap @@ -0,0 +1,112 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CLI help interface for 'node delete' should be expected english 1`] = ` +"Usage: frodo node delete [options] [host] [realm] [username] [password] + +Delete custom nodes. + +Arguments: + host AM base URL, e.g.: + https://cdk.iam.example.com/am. To use a + connection profile, just specify a + unique substring. + realm Realm. Specify realm as '/' for the root + realm or 'realm' or '/parent/child' + otherwise. (default: "alpha" for + Identity Cloud tenants, "/" otherwise.) + username Username to login with. Must be an admin + user with appropriate rights to manage + authentication journeys/trees. + password Password. + +Options: + -a, --all Delete all custom nodes. Ignored with -i + or -n. + --curlirize Output all network calls in curl format. + -D, --directory Set the working directory. + --debug Debug output during command execution. + If specified, may or may not produce + additional output helpful for + troubleshooting. + --flush-cache Flush token cache. + -h, --help Help + -i, --node-id Custom node id or service name. If + specified, only one custom node is + deleted and the options -n, -a and -A + are ignored. + --idm-host IDM base URL, e.g.: + https://cdk.idm.example.com/myidm. Use + only if your IDM installation resides in + a different domain and/or if the base + path differs from the default + "/openidm". + -k, --insecure Allow insecure connections when using + SSL/TLS. Has no effect when using a + network proxy for https + (HTTPS_PROXY=http://:), in + that case the proxy must provide this + capability. (default: Don't allow + insecure connections) + --login-client-id Specify a custom OAuth2 client id to use + a your own oauth2 client for IDM API + calls in deployments of type "cloud" or + "forgeops". Your custom client must be + configured as a public client and allow + the authorization code grant using the + "openid fr:idm:*" scope. Use the + "--redirect-uri" parameter if you have + configured a custom redirect uri + (default: + "/platform/appAuthHelperRedirect.html"). + --login-redirect-uri Specify a custom redirect URI to use + with your custom OAuth2 client (efault: + "/platform/appAuthHelperRedirect.html"). + -m, --type Override auto-detected deployment type. + Valid values for type: + classic: A classic Access + Management-only deployment with custom + layout and configuration. + cloud: A ForgeRock Identity Cloud + environment. + forgeops: A ForgeOps CDK or CDM + deployment. + The detected or provided deployment type + controls certain behavior like obtaining + an Identity Management admin token or + not and whether to export/import + referenced email templates or how to + walk through the tenant admin login flow + of Identity Cloud and handle MFA + (choices: "classic", "cloud", + "forgeops") + -n, --node-name Custom node display name. If specified, + only one custom node is deleted and the + options -a and -A are ignored. + --no-cache Disable token cache for this operation. + --sa-id Service account id. + --sa-jwk-file File containing the JSON Web Key (JWK) + associated with the the service account. + --verbose Verbose output during command execution. + If specified, may or may not produce + additional output. + +Environment Variables: + FRODO_HOST: AM base URL. Overridden by 'host' argument. + FRODO_IDM_HOST: IDM base URL. Overridden by '--idm-host' option. + FRODO_REALM: Realm. Overridden by 'realm' argument. + FRODO_USERNAME: Username. Overridden by 'username' argument. + FRODO_PASSWORD: Password. Overridden by 'password' argument. + FRODO_LOGIN_CLIENT_ID: OAuth2 client id for IDM API calls. Overridden by '--login-client-id' option. + FRODO_LOGIN_REDIRECT_URI: Redirect Uri for custom OAuth2 client id. Overridden by '--login-redirect-uri' option. + FRODO_SA_ID: Service account uuid. Overridden by '--sa-id' option. + FRODO_SA_JWK: Service account JWK. Overridden by '--sa-jwk-file' option but takes the actual JWK as a value, not a file name. + FRODO_NO_CACHE: Disable token cache. Same as '--no-cache' option. + FRODO_TOKEN_CACHE_PATH: Use this token cache file instead of '~/.frodo/TokenCache.json'. + FRODO_CONNECTION_PROFILES_PATH: Use this connection profiles file instead of '~/.frodo/Connections.json'. + FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use. + FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'. + FRODO_MASTER_KEY_PATH: Use this master key file instead of '~/.frodo/masterkey.key' file. + FRODO_MASTER_KEY: Use this master key instead of what's in '~/.frodo/masterkey.key'. Takes precedence over FRODO_MASTER_KEY_PATH. + +" +`; diff --git a/test/client_cli/en/__snapshots__/node-describe.test.js.snap b/test/client_cli/en/__snapshots__/node-describe.test.js.snap new file mode 100644 index 000000000..8e0d725b2 --- /dev/null +++ b/test/client_cli/en/__snapshots__/node-describe.test.js.snap @@ -0,0 +1,106 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CLI help interface for 'node describe' should be expected english 1`] = ` +"Usage: frodo node describe [options] [host] [realm] [username] [password] + +Describe custom nodes. + +Arguments: + host AM base URL, e.g.: + https://cdk.iam.example.com/am. To use a + connection profile, just specify a + unique substring. + realm Realm. Specify realm as '/' for the root + realm or 'realm' or '/parent/child' + otherwise. (default: "alpha" for + Identity Cloud tenants, "/" otherwise.) + username Username to login with. Must be an admin + user with appropriate rights to manage + authentication journeys/trees. + password Password. + +Options: + --curlirize Output all network calls in curl format. + -D, --directory Set the working directory. + --debug Debug output during command execution. + If specified, may or may not produce + additional output helpful for + troubleshooting. + --flush-cache Flush token cache. + -h, --help Help + -i, --node-id Custom node id or service name. + --idm-host IDM base URL, e.g.: + https://cdk.idm.example.com/myidm. Use + only if your IDM installation resides in + a different domain and/or if the base + path differs from the default + "/openidm". + --json Output in JSON format. + -k, --insecure Allow insecure connections when using + SSL/TLS. Has no effect when using a + network proxy for https + (HTTPS_PROXY=http://:), in + that case the proxy must provide this + capability. (default: Don't allow + insecure connections) + --login-client-id Specify a custom OAuth2 client id to use + a your own oauth2 client for IDM API + calls in deployments of type "cloud" or + "forgeops". Your custom client must be + configured as a public client and allow + the authorization code grant using the + "openid fr:idm:*" scope. Use the + "--redirect-uri" parameter if you have + configured a custom redirect uri + (default: + "/platform/appAuthHelperRedirect.html"). + --login-redirect-uri Specify a custom redirect URI to use + with your custom OAuth2 client (efault: + "/platform/appAuthHelperRedirect.html"). + -m, --type Override auto-detected deployment type. + Valid values for type: + classic: A classic Access + Management-only deployment with custom + layout and configuration. + cloud: A ForgeRock Identity Cloud + environment. + forgeops: A ForgeOps CDK or CDM + deployment. + The detected or provided deployment type + controls certain behavior like obtaining + an Identity Management admin token or + not and whether to export/import + referenced email templates or how to + walk through the tenant admin login flow + of Identity Cloud and handle MFA + (choices: "classic", "cloud", + "forgeops") + -n, --node-name Custom node display name. + --no-cache Disable token cache for this operation. + --sa-id Service account id. + --sa-jwk-file File containing the JSON Web Key (JWK) + associated with the the service account. + --verbose Verbose output during command execution. + If specified, may or may not produce + additional output. + +Environment Variables: + FRODO_HOST: AM base URL. Overridden by 'host' argument. + FRODO_IDM_HOST: IDM base URL. Overridden by '--idm-host' option. + FRODO_REALM: Realm. Overridden by 'realm' argument. + FRODO_USERNAME: Username. Overridden by 'username' argument. + FRODO_PASSWORD: Password. Overridden by 'password' argument. + FRODO_LOGIN_CLIENT_ID: OAuth2 client id for IDM API calls. Overridden by '--login-client-id' option. + FRODO_LOGIN_REDIRECT_URI: Redirect Uri for custom OAuth2 client id. Overridden by '--login-redirect-uri' option. + FRODO_SA_ID: Service account uuid. Overridden by '--sa-id' option. + FRODO_SA_JWK: Service account JWK. Overridden by '--sa-jwk-file' option but takes the actual JWK as a value, not a file name. + FRODO_NO_CACHE: Disable token cache. Same as '--no-cache' option. + FRODO_TOKEN_CACHE_PATH: Use this token cache file instead of '~/.frodo/TokenCache.json'. + FRODO_CONNECTION_PROFILES_PATH: Use this connection profiles file instead of '~/.frodo/Connections.json'. + FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use. + FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'. + FRODO_MASTER_KEY_PATH: Use this master key file instead of '~/.frodo/masterkey.key' file. + FRODO_MASTER_KEY: Use this master key instead of what's in '~/.frodo/masterkey.key'. Takes precedence over FRODO_MASTER_KEY_PATH. + +" +`; diff --git a/test/client_cli/en/__snapshots__/node-export.test.js.snap b/test/client_cli/en/__snapshots__/node-export.test.js.snap new file mode 100644 index 000000000..f625db1e7 --- /dev/null +++ b/test/client_cli/en/__snapshots__/node-export.test.js.snap @@ -0,0 +1,121 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CLI help interface for 'node export' should be expected english 1`] = ` +"Usage: frodo node export [options] [host] [realm] [username] [password] + +Export custom nodes. + +Arguments: + host AM base URL, e.g.: + https://cdk.iam.example.com/am. To use a + connection profile, just specify a + unique substring. + realm Realm. Specify realm as '/' for the root + realm or 'realm' or '/parent/child' + otherwise. (default: "alpha" for + Identity Cloud tenants, "/" otherwise.) + username Username to login with. Must be an admin + user with appropriate rights to manage + authentication journeys/trees. + password Password. + +Options: + -a, --all Export all custom nodes to a single + file. Ignored with -i or -n. + -A, --all-separate Export all custom nodes to separate + files (*.nodeTypes.json) in the current + directory. Ignored with -i, -n, or -a. + --curlirize Output all network calls in curl format. + -D, --directory Set the working directory. + --debug Debug output during command execution. + If specified, may or may not produce + additional output helpful for + troubleshooting. + -f, --file Name of the export file. + --flush-cache Flush token cache. + -h, --help Help + -i, --node-id Custom node id or service name. If + specified, only one custom node is + exported and the options -n, -a and -A + are ignored. + --idm-host IDM base URL, e.g.: + https://cdk.idm.example.com/myidm. Use + only if your IDM installation resides in + a different domain and/or if the base + path differs from the default + "/openidm". + -k, --insecure Allow insecure connections when using + SSL/TLS. Has no effect when using a + network proxy for https + (HTTPS_PROXY=http://:), in + that case the proxy must provide this + capability. (default: Don't allow + insecure connections) + --login-client-id Specify a custom OAuth2 client id to use + a your own oauth2 client for IDM API + calls in deployments of type "cloud" or + "forgeops". Your custom client must be + configured as a public client and allow + the authorization code grant using the + "openid fr:idm:*" scope. Use the + "--redirect-uri" parameter if you have + configured a custom redirect uri + (default: + "/platform/appAuthHelperRedirect.html"). + --login-redirect-uri Specify a custom redirect URI to use + with your custom OAuth2 client (efault: + "/platform/appAuthHelperRedirect.html"). + -m, --type Override auto-detected deployment type. + Valid values for type: + classic: A classic Access + Management-only deployment with custom + layout and configuration. + cloud: A ForgeRock Identity Cloud + environment. + forgeops: A ForgeOps CDK or CDM + deployment. + The detected or provided deployment type + controls certain behavior like obtaining + an Identity Management admin token or + not and whether to export/import + referenced email templates or how to + walk through the tenant admin login flow + of Identity Cloud and handle MFA + (choices: "classic", "cloud", + "forgeops") + -n, --node-name Custom node display name. If specified, + only one custom node is exported and the + options -a and -A are ignored. + -N, --no-metadata Does not include metadata in the export + file. + --no-cache Disable token cache for this operation. + --sa-id Service account id. + --sa-jwk-file File containing the JSON Web Key (JWK) + associated with the the service account. + --verbose Verbose output during command execution. + If specified, may or may not produce + additional output. + -x, --extract Extract the script from the exported + file, and save it to a separate file. + Ignored with -a. + +Environment Variables: + FRODO_HOST: AM base URL. Overridden by 'host' argument. + FRODO_IDM_HOST: IDM base URL. Overridden by '--idm-host' option. + FRODO_REALM: Realm. Overridden by 'realm' argument. + FRODO_USERNAME: Username. Overridden by 'username' argument. + FRODO_PASSWORD: Password. Overridden by 'password' argument. + FRODO_LOGIN_CLIENT_ID: OAuth2 client id for IDM API calls. Overridden by '--login-client-id' option. + FRODO_LOGIN_REDIRECT_URI: Redirect Uri for custom OAuth2 client id. Overridden by '--login-redirect-uri' option. + FRODO_SA_ID: Service account uuid. Overridden by '--sa-id' option. + FRODO_SA_JWK: Service account JWK. Overridden by '--sa-jwk-file' option but takes the actual JWK as a value, not a file name. + FRODO_NO_CACHE: Disable token cache. Same as '--no-cache' option. + FRODO_TOKEN_CACHE_PATH: Use this token cache file instead of '~/.frodo/TokenCache.json'. + FRODO_CONNECTION_PROFILES_PATH: Use this connection profiles file instead of '~/.frodo/Connections.json'. + FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use. + FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'. + FRODO_MASTER_KEY_PATH: Use this master key file instead of '~/.frodo/masterkey.key' file. + FRODO_MASTER_KEY: Use this master key instead of what's in '~/.frodo/masterkey.key'. Takes precedence over FRODO_MASTER_KEY_PATH. + +" +`; diff --git a/test/client_cli/en/__snapshots__/node-import.test.js.snap b/test/client_cli/en/__snapshots__/node-import.test.js.snap new file mode 100644 index 000000000..828d7873f --- /dev/null +++ b/test/client_cli/en/__snapshots__/node-import.test.js.snap @@ -0,0 +1,123 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CLI help interface for 'node import' should be expected english 1`] = ` +"Usage: frodo node import [options] [host] [realm] [username] [password] + +Import custom nodes. + +Arguments: + host AM base URL, e.g.: + https://cdk.iam.example.com/am. To use a + connection profile, just specify a + unique substring. + realm Realm. Specify realm as '/' for the root + realm or 'realm' or '/parent/child' + otherwise. (default: "alpha" for + Identity Cloud tenants, "/" otherwise.) + username Username to login with. Must be an admin + user with appropriate rights to manage + authentication journeys/trees. + password Password. + +Options: + -a, --all Import all custom nodes from single + file. Ignored with -i or -n. + -A, --all-separate Import all custom nodes from separate + files (*.nodeTypes.json) in the current + directory. Ignored with -i, -n, or -a. + --curlirize Output all network calls in curl format. + -D, --directory Set the working directory. + --debug Debug output during command execution. + If specified, may or may not produce + additional output helpful for + troubleshooting. + -f, --file Name of the file to import. + --flush-cache Flush token cache. + -h, --help Help + -i, --node-id Custom node id or service name. If + specified, only one custom node is + imported and the options -n, -a and -A + are ignored. + --idm-host IDM base URL, e.g.: + https://cdk.idm.example.com/myidm. Use + only if your IDM installation resides in + a different domain and/or if the base + path differs from the default + "/openidm". + -k, --insecure Allow insecure connections when using + SSL/TLS. Has no effect when using a + network proxy for https + (HTTPS_PROXY=http://:), in + that case the proxy must provide this + capability. (default: Don't allow + insecure connections) + --login-client-id Specify a custom OAuth2 client id to use + a your own oauth2 client for IDM API + calls in deployments of type "cloud" or + "forgeops". Your custom client must be + configured as a public client and allow + the authorization code grant using the + "openid fr:idm:*" scope. Use the + "--redirect-uri" parameter if you have + configured a custom redirect uri + (default: + "/platform/appAuthHelperRedirect.html"). + --login-redirect-uri Specify a custom redirect URI to use + with your custom OAuth2 client (efault: + "/platform/appAuthHelperRedirect.html"). + -m, --type Override auto-detected deployment type. + Valid values for type: + classic: A classic Access + Management-only deployment with custom + layout and configuration. + cloud: A ForgeRock Identity Cloud + environment. + forgeops: A ForgeOps CDK or CDM + deployment. + The detected or provided deployment type + controls certain behavior like obtaining + an Identity Management admin token or + not and whether to export/import + referenced email templates or how to + walk through the tenant admin login flow + of Identity Cloud and handle MFA + (choices: "classic", "cloud", + "forgeops") + -n, --node-name Custom node display name. If specified, + only one custom node is imported and the + options -a and -A are ignored. + --no-cache Disable token cache for this operation. + --re-uuid Re-UUID. Create a new UUID (and service + name) for the custom node upon import. + Use this to duplicate a custom node or + create a new version of the same custom + node. Note that you must also choose a + new display name using -n/--node-name to + avoid import errors. (default: false) + --sa-id Service account id. + --sa-jwk-file File containing the JSON Web Key (JWK) + associated with the the service account. + --verbose Verbose output during command execution. + If specified, may or may not produce + additional output. + +Environment Variables: + FRODO_HOST: AM base URL. Overridden by 'host' argument. + FRODO_IDM_HOST: IDM base URL. Overridden by '--idm-host' option. + FRODO_REALM: Realm. Overridden by 'realm' argument. + FRODO_USERNAME: Username. Overridden by 'username' argument. + FRODO_PASSWORD: Password. Overridden by 'password' argument. + FRODO_LOGIN_CLIENT_ID: OAuth2 client id for IDM API calls. Overridden by '--login-client-id' option. + FRODO_LOGIN_REDIRECT_URI: Redirect Uri for custom OAuth2 client id. Overridden by '--login-redirect-uri' option. + FRODO_SA_ID: Service account uuid. Overridden by '--sa-id' option. + FRODO_SA_JWK: Service account JWK. Overridden by '--sa-jwk-file' option but takes the actual JWK as a value, not a file name. + FRODO_NO_CACHE: Disable token cache. Same as '--no-cache' option. + FRODO_TOKEN_CACHE_PATH: Use this token cache file instead of '~/.frodo/TokenCache.json'. + FRODO_CONNECTION_PROFILES_PATH: Use this connection profiles file instead of '~/.frodo/Connections.json'. + FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use. + FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'. + FRODO_MASTER_KEY_PATH: Use this master key file instead of '~/.frodo/masterkey.key' file. + FRODO_MASTER_KEY: Use this master key instead of what's in '~/.frodo/masterkey.key'. Takes precedence over FRODO_MASTER_KEY_PATH. + +" +`; diff --git a/test/client_cli/en/__snapshots__/node-list.test.js.snap b/test/client_cli/en/__snapshots__/node-list.test.js.snap new file mode 100644 index 000000000..7ac2b92ff --- /dev/null +++ b/test/client_cli/en/__snapshots__/node-list.test.js.snap @@ -0,0 +1,104 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CLI help interface for 'node list' should be expected english 1`] = ` +"Usage: frodo node list [options] [host] [realm] [username] [password] + +List custom nodes. + +Arguments: + host AM base URL, e.g.: + https://cdk.iam.example.com/am. To use a + connection profile, just specify a + unique substring. + realm Realm. Specify realm as '/' for the root + realm or 'realm' or '/parent/child' + otherwise. (default: "alpha" for + Identity Cloud tenants, "/" otherwise.) + username Username to login with. Must be an admin + user with appropriate rights to manage + authentication journeys/trees. + password Password. + +Options: + --curlirize Output all network calls in curl format. + -D, --directory Set the working directory. + --debug Debug output during command execution. + If specified, may or may not produce + additional output helpful for + troubleshooting. + --flush-cache Flush token cache. + -h, --help Help + --idm-host IDM base URL, e.g.: + https://cdk.idm.example.com/myidm. Use + only if your IDM installation resides in + a different domain and/or if the base + path differs from the default + "/openidm". + -k, --insecure Allow insecure connections when using + SSL/TLS. Has no effect when using a + network proxy for https + (HTTPS_PROXY=http://:), in + that case the proxy must provide this + capability. (default: Don't allow + insecure connections) + -l, --long Long with all fields. (default: false) + --login-client-id Specify a custom OAuth2 client id to use + a your own oauth2 client for IDM API + calls in deployments of type "cloud" or + "forgeops". Your custom client must be + configured as a public client and allow + the authorization code grant using the + "openid fr:idm:*" scope. Use the + "--redirect-uri" parameter if you have + configured a custom redirect uri + (default: + "/platform/appAuthHelperRedirect.html"). + --login-redirect-uri Specify a custom redirect URI to use + with your custom OAuth2 client (efault: + "/platform/appAuthHelperRedirect.html"). + -m, --type Override auto-detected deployment type. + Valid values for type: + classic: A classic Access + Management-only deployment with custom + layout and configuration. + cloud: A ForgeRock Identity Cloud + environment. + forgeops: A ForgeOps CDK or CDM + deployment. + The detected or provided deployment type + controls certain behavior like obtaining + an Identity Management admin token or + not and whether to export/import + referenced email templates or how to + walk through the tenant admin login flow + of Identity Cloud and handle MFA + (choices: "classic", "cloud", + "forgeops") + --no-cache Disable token cache for this operation. + --sa-id Service account id. + --sa-jwk-file File containing the JSON Web Key (JWK) + associated with the the service account. + --verbose Verbose output during command execution. + If specified, may or may not produce + additional output. + +Environment Variables: + FRODO_HOST: AM base URL. Overridden by 'host' argument. + FRODO_IDM_HOST: IDM base URL. Overridden by '--idm-host' option. + FRODO_REALM: Realm. Overridden by 'realm' argument. + FRODO_USERNAME: Username. Overridden by 'username' argument. + FRODO_PASSWORD: Password. Overridden by 'password' argument. + FRODO_LOGIN_CLIENT_ID: OAuth2 client id for IDM API calls. Overridden by '--login-client-id' option. + FRODO_LOGIN_REDIRECT_URI: Redirect Uri for custom OAuth2 client id. Overridden by '--login-redirect-uri' option. + FRODO_SA_ID: Service account uuid. Overridden by '--sa-id' option. + FRODO_SA_JWK: Service account JWK. Overridden by '--sa-jwk-file' option but takes the actual JWK as a value, not a file name. + FRODO_NO_CACHE: Disable token cache. Same as '--no-cache' option. + FRODO_TOKEN_CACHE_PATH: Use this token cache file instead of '~/.frodo/TokenCache.json'. + FRODO_CONNECTION_PROFILES_PATH: Use this connection profiles file instead of '~/.frodo/Connections.json'. + FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use. + FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'. + FRODO_MASTER_KEY_PATH: Use this master key file instead of '~/.frodo/masterkey.key' file. + FRODO_MASTER_KEY: Use this master key instead of what's in '~/.frodo/masterkey.key'. Takes precedence over FRODO_MASTER_KEY_PATH. + +" +`; diff --git a/test/client_cli/en/__snapshots__/node.test.js.snap b/test/client_cli/en/__snapshots__/node.test.js.snap new file mode 100644 index 000000000..36904bde7 --- /dev/null +++ b/test/client_cli/en/__snapshots__/node.test.js.snap @@ -0,0 +1,19 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CLI help interface for 'node' should be expected english 1`] = ` +"Usage: frodo node [options] [command] + +Manage custom nodes. + +Options: + -h, --help Help + +Commands: + delete Delete custom nodes. + describe Describe custom nodes. + export Export custom nodes. + help display help for command + import Import custom nodes. + list List custom nodes. +" +`; diff --git a/test/client_cli/en/__snapshots__/root.test.js.snap b/test/client_cli/en/__snapshots__/root.test.js.snap index d31f1b894..e7296f500 100644 --- a/test/client_cli/en/__snapshots__/root.test.js.snap +++ b/test/client_cli/en/__snapshots__/root.test.js.snap @@ -23,6 +23,7 @@ Commands: journey Manage journeys/trees. log|logs List/View Identity Cloud logs mapping Manage IDM mappings. + node Manage custom nodes. oauth Manage OAuth2 clients and providers. promote [options] [host] [realm] [username] [password] Prepares a tenant to be promoted realm Manage realms. diff --git a/test/client_cli/en/node-delete.test.js b/test/client_cli/en/node-delete.test.js new file mode 100644 index 000000000..dc1a1f5f7 --- /dev/null +++ b/test/client_cli/en/node-delete.test.js @@ -0,0 +1,10 @@ +import cp from 'child_process'; +import { promisify } from 'util'; + +const exec = promisify(cp.exec); +const CMD = 'frodo node delete --help'; +const { stdout } = await exec(CMD); + +test("CLI help interface for 'node delete' should be expected english", async () => { + expect(stdout).toMatchSnapshot(); +}); diff --git a/test/client_cli/en/node-describe.test.js b/test/client_cli/en/node-describe.test.js new file mode 100644 index 000000000..0f1cf7eb2 --- /dev/null +++ b/test/client_cli/en/node-describe.test.js @@ -0,0 +1,10 @@ +import cp from 'child_process'; +import { promisify } from 'util'; + +const exec = promisify(cp.exec); +const CMD = 'frodo node describe --help'; +const { stdout } = await exec(CMD); + +test("CLI help interface for 'node describe' should be expected english", async () => { + expect(stdout).toMatchSnapshot(); +}); diff --git a/test/client_cli/en/node-export.test.js b/test/client_cli/en/node-export.test.js new file mode 100644 index 000000000..d63d048fe --- /dev/null +++ b/test/client_cli/en/node-export.test.js @@ -0,0 +1,10 @@ +import cp from 'child_process'; +import { promisify } from 'util'; + +const exec = promisify(cp.exec); +const CMD = 'frodo node export --help'; +const { stdout } = await exec(CMD); + +test("CLI help interface for 'node export' should be expected english", async () => { + expect(stdout).toMatchSnapshot(); +}); diff --git a/test/client_cli/en/node-import.test.js b/test/client_cli/en/node-import.test.js new file mode 100644 index 000000000..f143ddf3a --- /dev/null +++ b/test/client_cli/en/node-import.test.js @@ -0,0 +1,10 @@ +import cp from 'child_process'; +import { promisify } from 'util'; + +const exec = promisify(cp.exec); +const CMD = 'frodo node import --help'; +const { stdout } = await exec(CMD); + +test("CLI help interface for 'node import' should be expected english", async () => { + expect(stdout).toMatchSnapshot(); +}); diff --git a/test/client_cli/en/node-list.test.js b/test/client_cli/en/node-list.test.js new file mode 100644 index 000000000..8e56c700d --- /dev/null +++ b/test/client_cli/en/node-list.test.js @@ -0,0 +1,10 @@ +import cp from 'child_process'; +import { promisify } from 'util'; + +const exec = promisify(cp.exec); +const CMD = 'frodo node list --help'; +const { stdout } = await exec(CMD); + +test("CLI help interface for 'node list' should be expected english", async () => { + expect(stdout).toMatchSnapshot(); +}); diff --git a/test/client_cli/en/node.test.js b/test/client_cli/en/node.test.js new file mode 100644 index 000000000..f75fbba36 --- /dev/null +++ b/test/client_cli/en/node.test.js @@ -0,0 +1,10 @@ +import cp from 'child_process'; +import { promisify } from 'util'; + +const exec = promisify(cp.exec); +const CMD = 'frodo node --help'; +const { stdout } = await exec(CMD); + +test("CLI help interface for 'node' should be expected english", async () => { + expect(stdout).toMatchSnapshot(); +}); diff --git a/test/e2e/__snapshots__/node-delete.e2e.test.js.snap b/test/e2e/__snapshots__/node-delete.e2e.test.js.snap new file mode 100644 index 000000000..8cb1f51b8 --- /dev/null +++ b/test/e2e/__snapshots__/node-delete.e2e.test.js.snap @@ -0,0 +1,139 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`frodo node delete "frodo node delete --all": should not delete any nodes if they are all in use 1`] = ` +"Connected to https://openam-frodo-dev.forgeblocks.com/am [alpha] as service account Frodo TriVir [b672336b-41ef-428d-ae4a-e0c082875377] +- Deleting custom nodes... +Error deleting custom node Display Callback + Error deleting custom node Display Callback + HTTP client error + URL: https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1 + Status: 400 + Code: ERR_BAD_REQUEST + Reason: Bad Request + Message: Cannot delete node type that is in use +Error deleting custom node Has Session AM + Error deleting custom node Has Session AM + HTTP client error + URL: https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/session-1 + Status: 400 + Code: ERR_BAD_REQUEST + Reason: Bad Request + Message: Cannot delete node type that is in use +Error deleting custom node Display State + Error deleting custom node Display State + HTTP client error + URL: https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/8ab9f1aad4b4460a9c45d15fb148e221-1 + Status: 400 + Code: ERR_BAD_REQUEST + Reason: Bad Request + Message: Cannot delete node type that is in use +Error deleting custom node Vector ALU + Error deleting custom node Vector ALU + HTTP client error + URL: https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c15e2efb3deb4d4ea338c74a6440b69f-1 + Status: 400 + Code: ERR_BAD_REQUEST + Reason: Bad Request + Message: Cannot delete node type that is in use +Error deleting custom node Has Session + Error deleting custom node Has Session + HTTP client error + URL: https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1 + Status: 400 + Code: ERR_BAD_REQUEST + Reason: Bad Request + Message: Cannot delete node type that is in use +Error deleting custom node ALU + Error deleting custom node ALU + HTTP client error + URL: https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c6063fb2f5dc42dd9772bedc93898bd8-1 + Status: 400 + Code: ERR_BAD_REQUEST + Reason: Bad Request + Message: Cannot delete node type that is in use +✔ Deleted custom nodes. +" +`; + +exports[`frodo node delete "frodo node delete --node-id c605506774a848f7877b4d17a453bd39-1": should display error when the custom node with id 'c605506774a848f7877b4d17a453bd39-1' cannot be deleted since it is being used 1`] = ` +"Connected to https://openam-frodo-dev.forgeblocks.com/am [alpha] as service account Frodo TriVir [b672336b-41ef-428d-ae4a-e0c082875377] +- Deleting c605506774a848f7877b4d17a453bd39-1... +✖ Error: Error deleting custom node c605506774a848f7877b4d17a453bd39-1 +Error deleting custom node c605506774a848f7877b4d17a453bd39-1 + HTTP client error + URL: https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1 + Status: 400 + Code: ERR_BAD_REQUEST + Reason: Bad Request + Message: Cannot delete node type that is in use +" +`; + +exports[`frodo node delete "frodo node delete --node-name 'Unknown'": should display error when the custom node named 'Unknown' cannot be deleted since it doesn't exist 1`] = ` +"Connected to https://openam-frodo-dev.forgeblocks.com/am [alpha] as service account Frodo TriVir [b672336b-41ef-428d-ae4a-e0c082875377] +- Deleting Unknown... +✖ Error: Error deleting custom node Unknown +Error deleting custom node Unknown + Error reading custom node Unknown + Custom node 'Unknown' not found +" +`; + +exports[`frodo node delete "frodo node delete -a": should delete all nodes that are not being used 1`] = ` +"Connected to https://openam-frodo-dev.forgeblocks.com/am [alpha] as service account Frodo TriVir [b672336b-41ef-428d-ae4a-e0c082875377] +- Deleting custom nodes... +Error deleting custom node Display Callback + Error deleting custom node Display Callback + HTTP client error + URL: https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1 + Status: 400 + Code: ERR_BAD_REQUEST + Reason: Bad Request + Message: Cannot delete node type that is in use +Error deleting custom node Has Session AM + Error deleting custom node Has Session AM + HTTP client error + URL: https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/session-1 + Status: 400 + Code: ERR_BAD_REQUEST + Reason: Bad Request + Message: Cannot delete node type that is in use +Error deleting custom node Display State + Error deleting custom node Display State + HTTP client error + URL: https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/8ab9f1aad4b4460a9c45d15fb148e221-1 + Status: 400 + Code: ERR_BAD_REQUEST + Reason: Bad Request + Message: Cannot delete node type that is in use +Error deleting custom node Vector ALU + Error deleting custom node Vector ALU + HTTP client error + URL: https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c15e2efb3deb4d4ea338c74a6440b69f-1 + Status: 400 + Code: ERR_BAD_REQUEST + Reason: Bad Request + Message: Cannot delete node type that is in use +Error deleting custom node Has Session + Error deleting custom node Has Session + HTTP client error + URL: https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1 + Status: 400 + Code: ERR_BAD_REQUEST + Reason: Bad Request + Message: Cannot delete node type that is in use +Error deleting custom node ALU + Error deleting custom node ALU + HTTP client error + URL: https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c6063fb2f5dc42dd9772bedc93898bd8-1 + Status: 400 + Code: ERR_BAD_REQUEST + Reason: Bad Request + Message: Cannot delete node type that is in use +✔ Deleted custom nodes. +" +`; + +exports[`frodo node delete "frodo node delete -i e5ad0110c8ee4dafaae983003cd05d4a": should delete the custom node with service name 'e5ad0110c8ee4dafaae983003cd05d4a' 1`] = `""`; + +exports[`frodo node delete "frodo node delete -n 'Generate JWT'": should delete the custom node named 'Generate JWT' 1`] = `""`; diff --git a/test/e2e/__snapshots__/node-describe.e2e.test.js.snap b/test/e2e/__snapshots__/node-describe.e2e.test.js.snap new file mode 100644 index 000000000..cb2b17b14 --- /dev/null +++ b/test/e2e/__snapshots__/node-describe.e2e.test.js.snap @@ -0,0 +1,526 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`frodo node describe "frodo node describe --json --node-id c605506774a848f7877b4d17a453bd39-1": should describe the custom node with id "c605506774a848f7877b4d17a453bd39-1" with json output 1`] = ` +"{ + _id: 'c605506774a848f7877b4d17a453bd39-1', + _rev: '1974329536', + serviceName: 'c605506774a848f7877b4d17a453bd39', + displayName: 'Has Session', + description: 'Checks if the user has a current session.', + outcomes: [ 'True', 'False' ], + outputs: [], + inputs: [], + script: 'var SCRIPT_OUTCOMES = {\\n' + + " TRUE: 'True',\\n" + + " FALSE: 'False'\\n" + + '}\\n' + + '\\n' + + 'function main() {\\n' + + ' action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n' + + '}\\n' + + '\\n' + + 'main();\\n', + errorOutcome: false, + tags: [ 'utilities' ], + properties: {}, + locations: { + '/alpha': { + PrestonTestJourney: [ + 'f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5', + '8919c0d5-b40f-43df-b8f3-0934ae79920f' + ] + }, + '/bravo': { + PrestonTestJourney: [ + 'f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5', + '8919c0d5-b40f-43df-b8f3-0934ae79920f' + ] + } + } +} +" +`; + +exports[`frodo node describe "frodo node describe --json --node-name 'Display Callback'": should describe the custom node with name "Display Callback" with json output 1`] = ` +"{ + _id: 'ef81b1a52c914710b3388caebfe7233a-1', + _rev: '-1360543129', + serviceName: 'ef81b1a52c914710b3388caebfe7233a', + displayName: 'Display Callback', + description: 'Displays custom callback to the page', + outcomes: [ 'outcome' ], + outputs: [], + inputs: [], + script: 'var SCRIPT_OUTCOMES = {\\n' + + " OUTCOME: 'outcome'\\n" + + '};\\n' + + '\\n' + + 'var CALLBACKS = {\\n' + + '\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK",\\n' + + '\\tCHOICE_CALLBACK: "CHOICE_CALLBACK",\\n' + + '\\tCONFIRMATION_CALLBACK: "CONFIRMATION_CALLBACK",\\n' + + '\\tCONSENT_MAPPING_CALLBACK: "CONSENT_MAPPING_CALLBACK",\\n' + + '\\tDEVICE_PROFILE_CALLBACK: "DEVICE_PROFILE_CALLBACK",\\n' + + '\\tHIDDEN_VALUE_CALLBACK: "HIDDEN_VALUE_CALLBACK",\\n' + + '\\tHTTP_CALLBACK: "HTTP_CALLBACK",\\n' + + '\\tIDP_CALLBACK: "IDP_CALLBACK",\\n' + + '\\tKBA_CREATE_CALLBACK: "KBA_CREATE_CALLBACK",\\n' + + '\\tLANGUAGE_CALLBACK: "LANGUAGE_CALLBACK",\\n' + + '\\tMETADATA_CALLBACK: "METADATA_CALLBACK",\\n' + + '\\tNAME_CALLBACK: "NAME_CALLBACK",\\n' + + '\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: "NUMBER_ATTRIBUTE_INPUT_CALLBACK",\\n' + + '\\tPASSWORD_CALLBACK: "PASSWORD_CALLBACK",\\n' + + '\\tPOLLING_WAIT_CALLBACK: "POLLING_WAIT_CALLBACK",\\n' + + ' REDIRECT_CALLBACK: "REDIRECT_CALLBACK",\\n' + + '\\tSCRIPT_TEXT_OUTPUT_CALLBACK: "SCRIPT_TEXT_OUTPUT_CALLBACK",\\n' + + '\\tSELECT_IDP_CALLBACK: "SELECT_IDP_CALLBACK",\\n' + + '\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: "STRING_ATTRIBUTE_INPUT_CALLBACK",\\n' + + '\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: "SUSPENDED_TEXT_OUTPUT_CALLBACK",\\n' + + '\\tTERMS_AND_CONDITIONS_CALLBACK: "TERMS_AND_CONDITIONS_CALLBACK",\\n' + + '\\tTEXT_INPUT_CALLBACK: "TEXT_INPUT_CALLBACK",\\n' + + '\\tTEXT_OUTPUT_CALLBACK: "TEXT_OUTPUT_CALLBACK",\\n' + + '\\tVALIDATED_PASSWORD_CALLBACK: "VALIDATED_PASSWORD_CALLBACK",\\n' + + '\\tVALIDATED_USERNAME_CALLBACK: "VALIDATED_USERNAME_CALLBACK",\\n' + + '\\tX509_CERTIFICATE_CALLBACK: "X509_CERTIFICATE_CALLBACK"\\n' + + '}\\n' + + '\\n' + + 'function isStringPresent(value) {\\n' + + ' return value;\\n' + + '}\\n' + + '\\n' + + 'function getString(value) {\\n' + + " return value || '';\\n" + + '}\\n' + + '\\n' + + 'function isArrayPresent(value) {\\n' + + ' return value;\\n' + + '}\\n' + + '\\n' + + 'function getArray(value) {\\n' + + ' return value ? JSON.parse(value) : [];\\n' + + '}\\n' + + '\\n' + + 'function isObjectPresent(value) {\\n' + + ' return value;\\n' + + '}\\n' + + '\\n' + + 'function getObject(value) {\\n' + + ' return value ? JSON.parse(value) : {};\\n' + + '}\\n' + + '\\n' + + 'function isIntPresent(value) {\\n' + + ' return value;\\n' + + '}\\n' + + '\\n' + + 'function getInt(value) {\\n' + + ' return value ? parseInt(value) : 0;\\n' + + '}\\n' + + '\\n' + + 'function isDoublePresent(value) {\\n' + + ' return value;\\n' + + '}\\n' + + '\\n' + + 'function getDouble(value) {\\n' + + ' return value ? parseFloat(value) : 0.0;\\n' + + '}\\n' + + '\\n' + + 'function isBooleanPresent(value) {\\n' + + ' return value;\\n' + + '}\\n' + + '\\n' + + 'function getBoolean(value) {\\n' + + " return value ? value.toLowerCase() === 'true' : false;\\n" + + '}\\n' + + '\\n' + + 'function setProperty(value) {\\n' + + ' if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n' + + ' if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n' + + ' if (properties.objectSharedProperty) {\\n' + + ' var attributes = {};\\n' + + ' attributes[properties.objectSharedProperty] = value;\\n' + + ' nodeState.mergeShared({\\n' + + ' objectAttributes: attributes\\n' + + ' });\\n' + + ' }\\n' + + ' if (properties.objectTransientProperty) {\\n' + + ' var attributes = {};\\n' + + ' attributes[properties.objectTransientProperty] = value;\\n' + + ' nodeState.mergeTransient({\\n' + + ' objectAttributes: attributes\\n' + + ' });\\n' + + ' }\\n' + + '}\\n' + + '\\n' + + 'function booleanAttributeInputCallback() {\\n' + + ' var name = getString(properties.options.name);\\n' + + ' var prompt = getString(properties.options.prompt);\\n' + + ' var value = getBoolean(properties.options.value);\\n' + + ' var required = getBoolean(properties.options.required);\\n' + + ' var policies = getObject(properties.options.policies);\\n' + + ' var validateOnly = getBoolean(properties.options.validateOnly);\\n' + + ' var failedPolicies = getArray(properties.options.failedPolicies);\\n' + + ' if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n' + + ' if (isArrayPresent(failedPolicies)) {\\n' + + ' callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n' + + ' } else {\\n' + + ' callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n' + + ' }\\n' + + ' } else if (isArrayPresent(failedPolicies)) {\\n' + + ' callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n' + + ' } else {\\n' + + ' callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n' + + ' }\\n' + + '}\\n' + + '\\n' + + 'function choiceCallback() {\\n' + + ' var prompt = getString(properties.options.prompt);\\n' + + ' var choices = getArray(properties.options.choices);\\n' + + ' var defaultChoice = getInt(properties.options.defaultChoice);\\n' + + ' var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n' + + ' callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n' + + '}\\n' + + '\\n' + + 'function confirmationCallback() {\\n' + + ' var prompt = getString(properties.options.prompt);\\n' + + ' var messageType = getInt(properties.options.messageType);\\n' + + ' var options = getArray(properties.options.options);\\n' + + ' var optionType = getInt(properties.options.optionType);\\n' + + ' var defaultOption = getInt(properties.options.defaultOption);\\n' + + ' if (isStringPresent(properties.options.prompt)) {\\n' + + ' if (isIntPresent(properties.options.optionType)) {\\n' + + ' callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n' + + ' } else {\\n' + + ' callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n' + + ' }\\n' + + ' } else {\\n' + + ' if (isIntPresent(properties.options.optionType)) {\\n' + + ' callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n' + + ' } else {\\n' + + ' callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n' + + ' }\\n' + + ' }\\n' + + '}\\n' + + '\\n' + + 'function consentMappingCallback() {\\n' + + ' var config = getObject(properties.options.config);\\n' + + ' var message = getString(properties.options.message);\\n' + + ' var isRequired = getBoolean(properties.options.isRequired);\\n' + + ' var name = getString(properties.options.name);\\n' + + ' var displayName = getString(properties.options.displayName);\\n' + + ' var icon = getString(properties.options.icon);\\n' + + ' var accessLevel = getString(properties.options.accessLevel);\\n' + + ' var titles = getArray(properties.options.titles);\\n' + + ' if (isObjectPresent(properties.options.prompt)) {\\n' + + ' callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n' + + ' } else {\\n' + + ' callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n' + + ' }\\n' + + '}\\n' + + '\\n' + + 'function deviceProfileCallback() {\\n' + + ' var metadata = getBoolean(properties.options.metadata);\\n' + + ' var location = getBoolean(properties.options.location);\\n' + + ' var message = getString(properties.options.message);\\n' + + ' callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n' + + '}\\n' + + '\\n' + + 'function hiddenValueCallback() {\\n' + + ' var id = getString(properties.options.id);\\n' + + ' var value = getString(properties.options.value);\\n' + + ' callbacksBuilder.hiddenValueCallback(id, value);\\n' + + '}\\n' + + '\\n' + + 'function httpCallback() {\\n' + + ' var authorizationHeader = getString(properties.options.authorizationHeader);\\n' + + ' var negotiationHeader = getString(properties.options.negotiationHeader);\\n' + + ' var authRHeader = getString(properties.options.authRHeader);\\n' + + ' var negoName = getString(properties.options.negoName);\\n' + + ' var negoValue = getString(properties.options.negoValue);\\n' + + ' if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n' + + ' var errorCode = getString(properties.options.errorCode);\\n' + + ' callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n' + + ' } else {\\n' + + ' var errorCode = getInt(properties.options.errorCode);\\n' + + ' callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n' + + ' }\\n' + + '}\\n' + + '\\n' + + 'function idPCallback() {\\n' + + ' var provider = getString(properties.options.provider);\\n' + + ' var clientId = getString(properties.options.clientId);\\n' + + ' var redirectUri = getString(properties.options.redirectUri);\\n' + + ' var scope = getArray(properties.options.scope);\\n' + + ' var nonce = getString(properties.options.nonce);\\n' + + ' var request = getString(properties.options.request);\\n' + + ' var requestUri = getString(properties.options.requestUri);\\n' + + ' var acrValues = getArray(properties.options.acrValues);\\n' + + ' var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n' + + ' var token = getString(properties.options.token);\\n' + + ' var tokenType = getString(properties.options.tokenType);\\n' + + ' if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n' + + ' callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n' + + ' } else {\\n' + + ' callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n' + + ' }\\n' + + '}\\n' + + '\\n' + + 'function kbaCreateCallback() {\\n' + + ' var prompt = getString(properties.options.prompt);\\n' + + ' var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n' + + ' var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n' + + ' callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n' + + '}\\n' + + '\\n' + + 'function languageCallback() {\\n' + + ' var language = getString(properties.options.language);\\n' + + ' var country = getString(properties.options.country);\\n' + + ' callbacksBuilder.languageCallback(language, country);\\n' + + '}\\n' + + '\\n' + + 'function metadataCallback() {\\n' + + ' var outputValue = getObject(properties.options.outputValue);\\n' + + ' callbacksBuilder.metadataCallback(outputValue);\\n' + + '}\\n' + + '\\n' + + 'function nameCallback() {\\n' + + ' var prompt = getString(properties.options.prompt);\\n' + + ' var defaultName = getString(properties.options.defaultName);\\n' + + ' if (isStringPresent(properties.options.defaultName)) {\\n' + + ' callbacksBuilder.nameCallback(prompt, defaultName);\\n' + + ' } else {\\n' + + ' callbacksBuilder.nameCallback(prompt);\\n' + + ' }\\n' + + '}\\n' + + '\\n' + + 'function numberAttributeInputCallback() {\\n' + + ' var name = getString(properties.options.name);\\n' + + ' var prompt = getString(properties.options.prompt);\\n' + + ' var value = getDouble(properties.options.value);\\n' + + ' var required = getBoolean(properties.options.required);\\n' + + ' var policies = getObject(properties.options.policies);\\n' + + ' var validateOnly = getBoolean(properties.options.validateOnly);\\n' + + ' var failedPolicies = get'... 11323 more characters, + errorOutcome: false, + tags: [ 'callback', 'utilities' ], + properties: { + callback: { + title: 'Callback', + description: 'The callback to display', + type: 'STRING', + required: true, + options: { + METADATA_CALLBACK: 'metadataCallback', + TERMS_AND_CONDITIONS_CALLBACK: 'termsAndConditionsCallback', + NUMBER_ATTRIBUTE_INPUT_CALLBACK: 'numberAttributeInputCallback', + TEXT_OUTPUT_CALLBACK: 'textOutputCallback', + SCRIPT_TEXT_OUTPUT_CALLBACK: 'scriptTextOutputCallback', + CONSENT_MAPPING_CALLBACK: 'consentMappingCallback', + STRING_ATTRIBUTE_INPUT_CALLBACK: 'stringAttributeInputCallback', + IDP_CALLBACK: 'idPCallback', + VALIDATED_PASSWORD_CALLBACK: 'validatedPasswordCallback', + SELECT_IDP_CALLBACK: 'selectIdPCallback', + POLLING_WAIT_CALLBACK: 'pollingWaitCallback', + NAME_CALLBACK: 'nameCallback', + SUSPENDED_TEXT_OUTPUT_CALLBACK: 'suspendedTextOutputCallback', + REDIRECT_CALLBACK: 'redirectCallback', + X509_CERTIFICATE_CALLBACK: 'x509CertificateCallback', + PASSWORD_CALLBACK: 'passwordCallback', + TEXT_INPUT_CALLBACK: 'textInputCallback', + BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: 'booleanAttributeInputCallback', + CONFIRMATION_CALLBACK: 'confirmationCallback', + CHOICE_CALLBACK: 'choiceCallback', + DEVICE_PROFILE_CALLBACK: 'deviceProfileCallback', + HIDDEN_VALUE_CALLBACK: 'hiddenValueCallback', + HTTP_CALLBACK: 'httpCallback', + VALIDATED_USERNAME_CALLBACK: 'validatedUsernameCallback', + KBA_CREATE_CALLBACK: 'kbaCreateCallback', + LANGUAGE_CALLBACK: 'languageCallback' + }, + multivalued: false + }, + objectSharedProperty: { + title: 'Object Attributes Shared Property', + description: 'The objectAttributes property on the shared state to put the callback input into (if applicable)', + type: 'STRING', + required: false, + multivalued: false + }, + objectTransientProperty: { + title: 'Object Attributes Transient Property', + description: 'The objectAttributes property on the transient state to put the callback input into (if applicable)', + type: 'STRING', + required: false, + multivalued: false + }, + options: { + title: 'Options', + description: 'The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n' + + '\\n' + + 'For example, for textOutputCallback, the options could be: { messageType: 0, message: "Hello World!" }. \\n' + + '\\n' + + 'Note that for required parameters that are not specified in the options will use default values based on the type of the parameter ("" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).', + type: 'OBJECT', + required: true, + multivalued: false + }, + sharedProperty: { + title: 'Shared State Property', + description: 'The shared state property to put the callback input into (if applicable)', + type: 'STRING', + required: false, + multivalued: false + }, + transientProperty: { + title: 'Transient State Property', + description: 'The transient state property to put the callback input into (if applicable)', + type: 'STRING', + required: false, + multivalued: false + } + }, + locations: { + '/bravo': { + FrodoTestJourney12: [ + 'd8bd62e2-a4e7-4e08-bb28-10570aa31fcf', + '18edd91b-5e15-49df-b3c3-764114a8ebb3', + 'eaf91b8a-bb71-4037-97ec-cd2e54885668', + 'ee549716-666c-4b9d-baab-defe1a93eb6c', + '03416cc6-588b-409a-919f-038bb8194c81', + '0a3d5de0-9426-4a9a-aae0-163eda075d43', + 'f9155861-f7c8-4022-9bed-e4ef5b238824', + '65c2a8cd-e623-4c5d-b420-e55fc5105f43', + '1a002d5d-5ad5-4d0e-965f-a0f26278d08d' + ] + } + } +} +" +`; + +exports[`frodo node describe "frodo node describe --node-name 'Unknown'": should fail to describe the non-existent custom node with name "Unknown" 1`] = ` +"Connected to https://openam-frodo-dev.forgeblocks.com/am [alpha] as service account Frodo TriVir [b672336b-41ef-428d-ae4a-e0c082875377] +Error reading custom node Unknown + Custom node 'Unknown' not found +" +`; + +exports[`frodo node describe "frodo node describe -i c605506774a848f7877b4d17a453bd39": should describe the custom node with service name "c605506774a848f7877b4d17a453bd39" 1`] = ` +"Id │c605506774a848f7877b4d17a453bd39-1 +Service Name│c605506774a848f7877b4d17a453bd39 +Display Name│Has Session +Description │Checks if the user has a current session. +Inputs │ +Outputs │ +Outcomes │True + │False +Tags │utilities +Locations │/alpha + │└── PrestonTestJourney + │ ├── f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5 + │ └── 8919c0d5-b40f-43df-b8f3-0934ae79920f + │/bravo + │└── PrestonTestJourney + │ ├── f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5 + │ └── 8919c0d5-b40f-43df-b8f3-0934ae79920f + +Properties +" +`; + +exports[`frodo node describe "frodo node describe -n 'Display Callback'": should describe the custom node with display name "Display Callback" 1`] = ` +"Id │ef81b1a52c914710b3388caebfe7233a-1 +Service Name│ef81b1a52c914710b3388caebfe7233a +Display Name│Display Callback +Description │Displays custom callback to the page +Inputs │ +Outputs │ +Outcomes │outcome +Tags │callback + │utilities +Locations │/bravo + │└── FrodoTestJourney12 + │ ├── d8bd62e2-a4e7-4e08-bb28-10570aa31fcf + │ ├── 18edd91b-5e15-49df-b3c3-764114a8ebb3 + │ ├── eaf91b8a-bb71-4037-97ec-cd2e54885668 + │ ├── ee549716-666c-4b9d-baab-defe1a93eb6c + │ ├── 03416cc6-588b-409a-919f-038bb8194c81 + │ ├── 0a3d5de0-9426-4a9a-aae0-163eda075d43 + │ ├── f9155861-f7c8-4022-9bed-e4ef5b238824 + │ ├── 65c2a8cd-e623-4c5d-b420-e55fc5105f43 + │ └── 1a002d5d-5ad5-4d0e-965f-a0f26278d08d + +Properties + +Name │callback +Title │Callback +Description│The callback to display +Required │true +Type │STRING +Multivalued│false +Options │METADATA_CALLBACK (metadataCallback) + │TERMS_AND_CONDITIONS_CALLBACK (termsAndConditionsCallback) + │NUMBER_ATTRIBUTE_INPUT_CALLBACK (numberAttributeInputCallback) + │TEXT_OUTPUT_CALLBACK (textOutputCallback) + │SCRIPT_TEXT_OUTPUT_CALLBACK (scriptTextOutputCallback) + │CONSENT_MAPPING_CALLBACK (consentMappingCallback) + │STRING_ATTRIBUTE_INPUT_CALLBACK (stringAttributeInputCallback) + │IDP_CALLBACK (idPCallback) + │VALIDATED_PASSWORD_CALLBACK (validatedPasswordCallback) + │SELECT_IDP_CALLBACK (selectIdPCallback) + │POLLING_WAIT_CALLBACK (pollingWaitCallback) + │NAME_CALLBACK (nameCallback) + │SUSPENDED_TEXT_OUTPUT_CALLBACK (suspendedTextOutputCallback) + │REDIRECT_CALLBACK (redirectCallback) + │X509_CERTIFICATE_CALLBACK (x509CertificateCallback) + │PASSWORD_CALLBACK (passwordCallback) + │TEXT_INPUT_CALLBACK (textInputCallback) + │BOOLEAN_ATTRIBUTE_INPUT_CALLBACK (booleanAttributeInputCallback) + │CONFIRMATION_CALLBACK (confirmationCallback) + │CHOICE_CALLBACK (choiceCallback) + │DEVICE_PROFILE_CALLBACK (deviceProfileCallback) + │HIDDEN_VALUE_CALLBACK (hiddenValueCallback) + │HTTP_CALLBACK (httpCallback) + │VALIDATED_USERNAME_CALLBACK (validatedUsernameCallback) + │KBA_CREATE_CALLBACK (kbaCreateCallback) + │LANGUAGE_CALLBACK (languageCallback) + +Name │objectSharedProperty +Title │Object Attributes Shared Property +Description│The objectAttributes property on the shared state to put the callback input into (if applicable) +Required │false +Type │STRING +Multivalued│false + +Name │objectTransientProperty +Title │Object Attributes Transient Property +Description│The objectAttributes property on the transient state to put the callback input into (if applicable) +Required │false +Type │STRING +Multivalued│false + +Name │options +Title │Options +Description│The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). + │ + │For example, for textOutputCallback, the options could be: { messageType: 0, message: "Hello World!" }. + │ + │Note that for required parameters that are not specified in the options will use default values based on the type of the parameter ("" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans). +Required │true +Type │OBJECT +Multivalued│false + +Name │sharedProperty +Title │Shared State Property +Description│The shared state property to put the callback input into (if applicable) +Required │false +Type │STRING +Multivalued│false + +Name │transientProperty +Title │Transient State Property +Description│The transient state property to put the callback input into (if applicable) +Required │false +Type │STRING +Multivalued│false +" +`; diff --git a/test/e2e/__snapshots__/node-export.e2e.test.js.snap b/test/e2e/__snapshots__/node-export.e2e.test.js.snap new file mode 100644 index 000000000..f64cf056f --- /dev/null +++ b/test/e2e/__snapshots__/node-export.e2e.test.js.snap @@ -0,0 +1,4930 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`frodo node export "frodo node export --all --no-metadata --file customNodeTest1.json --directory customNodeExportDir3": should export all nodes to a single file named customNodeTest1.json in the directory customNodeExportDir3 with no metadata 1`] = `0`; + +exports[`frodo node export "frodo node export --all --no-metadata --file customNodeTest1.json --directory customNodeExportDir3": should export all nodes to a single file named customNodeTest1.json in the directory customNodeExportDir3 with no metadata 2`] = `""`; + +exports[`frodo node export "frodo node export --all --no-metadata --file customNodeTest1.json --directory customNodeExportDir3": should export all nodes to a single file named customNodeTest1.json in the directory customNodeExportDir3 with no metadata: customNodeExportDir3/customNodeTest1.json 1`] = ` +{ + "nodeTypes": { + "8ab9f1aad4b4460a9c45d15fb148e221-1": { + "_id": "8ab9f1aad4b4460a9c45d15fb148e221-1", + "description": "Debug node that displays the shared and transient state of the journey for debugging purposes.", + "displayName": "Display State", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome", + ], + "outputs": [], + "properties": { + "displayFormat": { + "defaultValue": "TABLE", + "description": "The format in which to display the states.", + "multivalued": false, + "options": { + "JSON": "Raw JSON", + "TABLE": "HTML Table", + }, + "required": true, + "title": "Display Format", + "type": "STRING", + }, + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " OUTCOME: "outcome"", + "};", + "", + "function main() {", + " if (!callbacks.isEmpty()) {", + " action.goTo(SCRIPT_OUTCOMES.OUTCOME);", + " return;", + " }", + " var keySet = nodeState.keys(); // Java Set", + " var keys = Array.from(keySet); // Make it into JavaScript array", + " debugState = {};", + " for (var i in keys) {", + " var k = new String(keys[i]);", + " var item = nodeState.get(k);", + " if (typeof item === "object") {", + " debugState[k] = nodeState.getObject(k);", + " } else {", + " debugState[k] = nodeState.get(k);", + " }", + " }", + " if (properties.displayFormat === "JSON") {", + " callbacksBuilder.textOutputCallback(0, \`
\${JSON.stringify(debugState, null, 2)}
\`);", + " return;", + " }", + " callbacksBuilder.textOutputCallback(0, \`\${Array.from(Object.keys(debugState).map(k => \`\`))}
KeyValue
\${k}
\${debugState[k]}
\`);", + "}", + "", + "main();", + "", + ], + "serviceName": "8ab9f1aad4b4460a9c45d15fb148e221", + "tags": [ + "debug", + "testing", + ], + }, + "c15e2efb3deb4d4ea338c74a6440b69f-1": { + "_id": "c15e2efb3deb4d4ea338c74a6440b69f-1", + "description": "Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key "c".", + "displayName": "Vector ALU", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "Success", + ], + "outputs": [ + "c", + ], + "properties": { + "a": { + "defaultValue": [ + 1, + 2, + 3, + ], + "description": "Left vector operand", + "multivalued": true, + "required": true, + "title": "A", + "type": "NUMBER", + }, + "b": { + "defaultValue": [ + 4, + 5, + 6, + ], + "description": "Right vector operand", + "multivalued": true, + "required": true, + "title": "B", + "type": "NUMBER", + }, + "operator": { + "defaultValue": "DOT", + "description": "The binary operation to perform on the vectors.", + "multivalued": false, + "options": { + "ADD": "+", + "CROSS": "X", + "DOT": ".", + "SUBTRACT": "-", + }, + "required": true, + "title": "Operator", + "type": "STRING", + }, + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " SUCCESS: 'Success'", + "};", + "", + "var OPERATORS = {", + " ADD: "ADD",", + " SUBTRACT: "SUBTRACT",", + " DOT: "DOT",", + " CROSS: "CROSS"", + "}", + "", + "function add(a, b) {", + " return a.map((v, i) => v + b[i]);", + "}", + "", + "function subtract(a, b) {", + " return a.map((v, i) => v - b[i]);", + "}", + "", + "function dot(a, b) {", + " return a.reduce((sum, v, i) => sum + v * b[i], 0);", + "}", + "", + "function cross(a, b) {", + " return [", + " a[1] * b[2] - a[2] * b[1],", + " a[2] * b[0] - a[0] * b[2],", + " a[0] * b[1] - a[1] * b[0]", + " ];", + "}", + "", + "function main() {", + " if (properties.a.length !== properties.b.length) throw new Error("Vectors not the same dimension.");", + " switch (properties.operator) {", + " case OPERATORS.ADD:", + " nodeState.putShared("c", add(properties.a, properties.b));", + " break;", + " case OPERATORS.SUBTRACT:", + " nodeState.putShared("c", subtract(properties.a, properties.b));", + " break;", + " case OPERATORS.DOT:", + " nodeState.putShared("c", dot(properties.a, properties.b));", + " break;", + " case OPERATORS.CROSS:", + " if (properties.a.length !== 3) throw new Error("Vectors not dimension 3 for cross product");", + " nodeState.putShared("c", cross(properties.a, properties.b));", + " break;", + " default: throw new Error("Unknown operator.");", + " }", + " action.goTo(SCRIPT_OUTCOMES.SUCCESS);", + "}", + "", + "main();", + "", + ], + "serviceName": "c15e2efb3deb4d4ea338c74a6440b69f", + "tags": [ + "math", + "vector", + "utilities", + ], + }, + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": {}, + "script": [ + "var SCRIPT_OUTCOMES = {", + " TRUE: 'True',", + " FALSE: 'False'", + "}", + "", + "function main() {", + " action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);", + "}", + "", + "main();", + "", + ], + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities", + ], + }, + "c6063fb2f5dc42dd9772bedc93898bd8-1": { + "_id": "c6063fb2f5dc42dd9772bedc93898bd8-1", + "description": "Simple ALU that performs basic binary math operations. Expects an "x" and "y" value on the shared state, and will produce a new "z" value on the shared state as output.", + "displayName": "ALU", + "errorOutcome": true, + "inputs": [ + "x", + "y", + ], + "outcomes": [ + "Success", + ], + "outputs": [ + "z", + ], + "properties": { + "operator": { + "defaultValue": "ADD", + "description": "The operation to perform.", + "multivalued": false, + "options": { + "ADD": "+", + "DIVIDE": "/", + "MULTIPLY": "*", + "SUBTRACT": "-", + }, + "required": true, + "title": "Operator", + "type": "STRING", + }, + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " SUCCESS: 'Success'", + "};", + "", + "var OPERATORS = {", + " ADD: "ADD",", + " SUBTRACT: "SUBTRACT",", + " MULTIPLY: "MULTIPLY",", + " DIVIDE: "DIVIDE"", + "}", + "", + "function main() {", + " var a = Number(properties.a);", + " var b = Number(properties.b);", + " switch (properties.operator) {", + " case OPERATORS.ADD:", + " nodeState.putShared("z", a + b);", + " break;", + " case OPERATORS.SUBTRACT:", + " nodeState.putShared("z", a - b);", + " break;", + " case OPERATORS.MULTIPLY:", + " nodeState.putShared("z", a * b);", + " break;", + " case OPERATORS.DIVIDE:", + " if (b == 0) throw new Error("Cannot divide by 0");", + " nodeState.putShared("z", a / b);", + " break;", + " default: throw new Error("Unknown operator.");", + " }", + " action.goTo(SCRIPT_OUTCOMES.SUCCESS);", + "}", + "", + "main();", + "", + ], + "serviceName": "c6063fb2f5dc42dd9772bedc93898bd8", + "tags": [ + "math", + "utilities", + ], + }, + "e5ad0110c8ee4dafaae983003cd05d4a-1": { + "_id": "e5ad0110c8ee4dafaae983003cd05d4a-1", + "description": "Generate a signed JWT using the HMAC SHA-256 algorithm.", + "displayName": "Generate JWT", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": { + "audience": { + "description": "The audience (aud) claim", + "multivalued": false, + "required": true, + "title": "Audience", + "type": "STRING", + }, + "issuer": { + "description": "The issuer (iss) claim", + "multivalued": false, + "required": true, + "title": "Issuer", + "type": "STRING", + }, + "signingkey": { + "defaultValue": "esv.signing.key", + "description": "The secret label for the HMAC signing key", + "multivalued": false, + "required": true, + "title": "HMAC Signing Key", + "type": "STRING", + }, + "validity": { + "defaultValue": 5, + "description": "", + "multivalued": false, + "required": true, + "title": "Validity (minutes)", + "type": "NUMBER", + }, + }, + "script": [ + "var aud = properties.audience;", + "var iss = properties.issuer;", + "var validity = properties.validity;", + "var esv = properties.signingkey;", + "", + "var signingkey = systemEnv.getProperty(esv);", + "", + "var username = nodeState.get("username");", + "", + "var data = {", + " jwtType:"SIGNED",", + " jwsAlgorithm: "HS256",", + " issuer: iss,", + " subject: username,", + " audience: aud,", + " type: "JWT",", + " validityMinutes: validity,", + " signingKey: signingkey", + "};", + "", + "var jwt = jwtAssertion.generateJwt(data);", + "", + "if (jwt !== null && jwt.length > 0) {", + " nodeState.putShared("assertionJwt" , jwt);", + " action.goTo("True");", + "} else {", + " action.goTo("False");", + "}", + ], + "serviceName": "e5ad0110c8ee4dafaae983003cd05d4a", + "tags": [ + "Utilities", + "utilities", + ], + }, + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome", + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback", + }, + "required": true, + "title": "Callback", + "type": "STRING", + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING", + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING", + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). + +For example, for textOutputCallback, the options could be: { messageType: 0, message: "Hello World!" }. + +Note that for required parameters that are not specified in the options will use default values based on the type of the parameter ("" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT", + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING", + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING", + }, + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " OUTCOME: 'outcome'", + "};", + "", + "var CALLBACKS = {", + " BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK",", + " CHOICE_CALLBACK: "CHOICE_CALLBACK",", + " CONFIRMATION_CALLBACK: "CONFIRMATION_CALLBACK",", + " CONSENT_MAPPING_CALLBACK: "CONSENT_MAPPING_CALLBACK",", + " DEVICE_PROFILE_CALLBACK: "DEVICE_PROFILE_CALLBACK",", + " HIDDEN_VALUE_CALLBACK: "HIDDEN_VALUE_CALLBACK",", + " HTTP_CALLBACK: "HTTP_CALLBACK",", + " IDP_CALLBACK: "IDP_CALLBACK",", + " KBA_CREATE_CALLBACK: "KBA_CREATE_CALLBACK",", + " LANGUAGE_CALLBACK: "LANGUAGE_CALLBACK",", + " METADATA_CALLBACK: "METADATA_CALLBACK",", + " NAME_CALLBACK: "NAME_CALLBACK",", + " NUMBER_ATTRIBUTE_INPUT_CALLBACK: "NUMBER_ATTRIBUTE_INPUT_CALLBACK",", + " PASSWORD_CALLBACK: "PASSWORD_CALLBACK",", + " POLLING_WAIT_CALLBACK: "POLLING_WAIT_CALLBACK",", + " REDIRECT_CALLBACK: "REDIRECT_CALLBACK",", + " SCRIPT_TEXT_OUTPUT_CALLBACK: "SCRIPT_TEXT_OUTPUT_CALLBACK",", + " SELECT_IDP_CALLBACK: "SELECT_IDP_CALLBACK",", + " STRING_ATTRIBUTE_INPUT_CALLBACK: "STRING_ATTRIBUTE_INPUT_CALLBACK",", + " SUSPENDED_TEXT_OUTPUT_CALLBACK: "SUSPENDED_TEXT_OUTPUT_CALLBACK",", + " TERMS_AND_CONDITIONS_CALLBACK: "TERMS_AND_CONDITIONS_CALLBACK",", + " TEXT_INPUT_CALLBACK: "TEXT_INPUT_CALLBACK",", + " TEXT_OUTPUT_CALLBACK: "TEXT_OUTPUT_CALLBACK",", + " VALIDATED_PASSWORD_CALLBACK: "VALIDATED_PASSWORD_CALLBACK",", + " VALIDATED_USERNAME_CALLBACK: "VALIDATED_USERNAME_CALLBACK",", + " X509_CERTIFICATE_CALLBACK: "X509_CERTIFICATE_CALLBACK"", + "}", + "", + "function isStringPresent(value) {", + " return value;", + "}", + "", + "function getString(value) {", + " return value || '';", + "}", + "", + "function isArrayPresent(value) {", + " return value;", + "}", + "", + "function getArray(value) {", + " return value ? JSON.parse(value) : [];", + "}", + "", + "function isObjectPresent(value) {", + " return value;", + "}", + "", + "function getObject(value) {", + " return value ? JSON.parse(value) : {};", + "}", + "", + "function isIntPresent(value) {", + " return value;", + "}", + "", + "function getInt(value) {", + " return value ? parseInt(value) : 0;", + "}", + "", + "function isDoublePresent(value) {", + " return value;", + "}", + "", + "function getDouble(value) {", + " return value ? parseFloat(value) : 0.0;", + "}", + "", + "function isBooleanPresent(value) {", + " return value;", + "}", + "", + "function getBoolean(value) {", + " return value ? value.toLowerCase() === 'true' : false;", + "}", + "", + "function setProperty(value) {", + " if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);", + " if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);", + " if (properties.objectSharedProperty) {", + " var attributes = {};", + " attributes[properties.objectSharedProperty] = value;", + " nodeState.mergeShared({", + " objectAttributes: attributes", + " });", + " }", + " if (properties.objectTransientProperty) {", + " var attributes = {};", + " attributes[properties.objectTransientProperty] = value;", + " nodeState.mergeTransient({", + " objectAttributes: attributes", + " });", + " }", + "}", + "", + "function booleanAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getBoolean(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function choiceCallback() {", + " var prompt = getString(properties.options.prompt);", + " var choices = getArray(properties.options.choices);", + " var defaultChoice = getInt(properties.options.defaultChoice);", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);", + "}", + "", + "function confirmationCallback() {", + " var prompt = getString(properties.options.prompt);", + " var messageType = getInt(properties.options.messageType);", + " var options = getArray(properties.options.options);", + " var optionType = getInt(properties.options.optionType);", + " var defaultOption = getInt(properties.options.defaultOption);", + " if (isStringPresent(properties.options.prompt)) {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);", + " }", + " } else {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(messageType, options, defaultOption);", + " }", + " }", + "}", + "", + "function consentMappingCallback() {", + " var config = getObject(properties.options.config);", + " var message = getString(properties.options.message);", + " var isRequired = getBoolean(properties.options.isRequired);", + " var name = getString(properties.options.name);", + " var displayName = getString(properties.options.displayName);", + " var icon = getString(properties.options.icon);", + " var accessLevel = getString(properties.options.accessLevel);", + " var titles = getArray(properties.options.titles);", + " if (isObjectPresent(properties.options.prompt)) {", + " callbacksBuilder.consentMappingCallback(config, message, isRequired);", + " } else {", + " callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);", + " }", + "}", + "", + "function deviceProfileCallback() {", + " var metadata = getBoolean(properties.options.metadata);", + " var location = getBoolean(properties.options.location);", + " var message = getString(properties.options.message);", + " callbacksBuilder.deviceProfileCallback(metadata, location, message);", + "}", + "", + "function hiddenValueCallback() {", + " var id = getString(properties.options.id);", + " var value = getString(properties.options.value);", + " callbacksBuilder.hiddenValueCallback(id, value);", + "}", + "", + "function httpCallback() {", + " var authorizationHeader = getString(properties.options.authorizationHeader);", + " var negotiationHeader = getString(properties.options.negotiationHeader);", + " var authRHeader = getString(properties.options.authRHeader);", + " var negoName = getString(properties.options.negoName);", + " var negoValue = getString(properties.options.negoValue);", + " if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {", + " var errorCode = getString(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);", + " } else {", + " var errorCode = getInt(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);", + " }", + "}", + "", + "function idPCallback() {", + " var provider = getString(properties.options.provider);", + " var clientId = getString(properties.options.clientId);", + " var redirectUri = getString(properties.options.redirectUri);", + " var scope = getArray(properties.options.scope);", + " var nonce = getString(properties.options.nonce);", + " var request = getString(properties.options.request);", + " var requestUri = getString(properties.options.requestUri);", + " var acrValues = getArray(properties.options.acrValues);", + " var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);", + " var token = getString(properties.options.token);", + " var tokenType = getString(properties.options.tokenType);", + " if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);", + " } else {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);", + " }", + "}", + "", + "function kbaCreateCallback() {", + " var prompt = getString(properties.options.prompt);", + " var predefinedQuestions = getArray(properties.options.predefinedQuestions);", + " var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);", + " callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);", + "}", + "", + "function languageCallback() {", + " var language = getString(properties.options.language);", + " var country = getString(properties.options.country);", + " callbacksBuilder.languageCallback(language, country);", + "}", + "", + "function metadataCallback() {", + " var outputValue = getObject(properties.options.outputValue);", + " callbacksBuilder.metadataCallback(outputValue);", + "}", + "", + "function nameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultName = getString(properties.options.defaultName);", + " if (isStringPresent(properties.options.defaultName)) {", + " callbacksBuilder.nameCallback(prompt, defaultName);", + " } else {", + " callbacksBuilder.nameCallback(prompt);", + " }", + "}", + "", + "function numberAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getDouble(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function passwordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " callbacksBuilder.passwordCallback(prompt, echoOn);", + "}", + "", + "function pollingWaitCallback() {", + " var waitTime = getString(properties.options.waitTime);", + " var message = getString(properties.options.message);", + " callbacksBuilder.pollingWaitCallback(waitTime, message);", + "}", + "", + "function redirectCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function scriptTextOutputCallback() {", + " var message = getString(properties.options.message);", + " callbacksBuilder.scriptTextOutputCallback(message);", + "}", + "", + "function selectIdPCallback() {", + " var providers = getObject(properties.options.providers);", + " callbacksBuilder.selectIdPCallback(providers);", + "}", + "", + "function stringAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getString(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function suspendedTextOutputCallback() {", + " var messageType = getInt(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.suspendedTextOutputCallback(messageType, message);", + "}", + "", + "function termsAndConditionsCallback() {", + " var version = getString(properties.options.version);", + " var terms = getString(properties.options.terms);", + " var createDate = getString(properties.options.createDate);", + " callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);", + "}", + "", + "function textInputCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultText = getString(properties.options.defaultText);", + " if (isStringPresent(properties.options.defaultText)) {", + " callbacksBuilder.textInputCallback(prompt, defaultText);", + " } else {", + " callbacksBuilder.textInputCallback(prompt);", + " }", + "}", + "", + "function textOutputCallback() {", + " var messageType = getString(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.textOutputCallback(messageType, message);", + "}", + "", + "function validatedPasswordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);", + " }", + "}", + "", + "function validatedUsernameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);", + " }", + "}", + "", + "function x509CertificateCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function getBooleanAttributeInputCallback() {", + " setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));", + "}", + "", + "function getChoiceCallback() {", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " var selections = callbacks.getChoiceCallbacks().get(0);", + " setProperty(multipleSelectionsAllowed ? selections : selections[0]);", + "}", + "", + "function getConfirmationCallback() {", + " setProperty(callbacks.getConfirmationCallbacks().get(0));", + "}", + "", + "function getConsentMappingCallback() {", + " setProperty(callbacks.getConsentMappingCallbacks().get(0));", + "}", + "", + "function getDeviceProfileCallback() {", + " setProperty(callbacks.getDeviceProfileCallbacks().get(0));", + "}", + "", + "function getHiddenValueCallback() {", + " var id = getString(properties.options.id);", + " setProperty(callbacks.getHiddenValueCallbacks().get(id));", + "}", + "", + "function getHttpCallback() {", + " setProperty(callbacks.getHttpCallbacks().get(0));", + "}", + "", + "function getIdPCallback() {", + " setProperty(callbacks.getIdpCallbacks().get(0));", + "}", + "", + "function getKbaCreateCallback() {", + " setProperty(callbacks.getKbaCreateCallbacks().get(0));", + "}", + "", + "function getLanguageCallback() {", + " setProperty(callbacks.getLanguageCallbacks().get(0));", + "}", + "", + "function getNameCallback() {", + " setProperty(callbacks.getNameCallbacks().get(0));", + "}", + "", + "function getNumberAttributeInputCallback() {", + " setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));", + "}", + "", + "function getPasswordCallback() {", + " setProperty(callbacks.getPasswordCallbacks().get(0));", + "}", + "", + "function getSelectIdPCallback() {", + " setProperty(callbacks.getSelectIdPCallbacks().get(0));", + "}", + "", + "function getStringAttributeInputCallback() {", + " setProperty(callbacks.getStringAttributeInputCallbacks().get(0));", + "}", + "", + "function getTermsAndConditionsCallback() {", + " setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));", + "}", + "", + "function getTextInputCallback() {", + " setProperty(callbacks.getTextInputCallbacks().get(0));", + "}", + "", + "function getValidatedPasswordCallback() {", + " setProperty(callbacks.getValidatedPasswordCallbacks().get(0));", + "}", + "", + "function getValidatedUsernameCallback() {", + " setProperty(callbacks.getValidatedUsernameCallbacks().get(0));", + "}", + "", + "function getX509CertificateCallback() {", + " setProperty(callbacks.getX509CertificateCallbacks().get(0));", + "}", + "", + "function main() {", + " if (!callbacks.isEmpty()) {", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;", + " default: break;", + " }", + " action.goTo(SCRIPT_OUTCOMES.OUTCOME);", + " return;", + " }", + "", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: idPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;", + " case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: nameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;", + " case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;", + " case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;", + " case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;", + " case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;", + " case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;", + " default: throw new Error('Unknown Callback'); // Should never reach this case", + " }", + "}", + "", + "main();", + "", + ], + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities", + ], + }, + "session-1": { + "_id": "session-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session AM", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": {}, + "script": [ + "var SCRIPT_OUTCOMES = {", + " TRUE: 'True',", + " FALSE: 'False'", + "}", + "", + "function main() {", + " action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);", + "}", + "", + "main();", + "", + ], + "serviceName": "session", + "tags": [ + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5 1`] = `0`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5 2`] = `""`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/ALU.nodeTypes.js 1`] = ` +"var SCRIPT_OUTCOMES = { + SUCCESS: 'Success' +}; + +var OPERATORS = { + ADD: "ADD", + SUBTRACT: "SUBTRACT", + MULTIPLY: "MULTIPLY", + DIVIDE: "DIVIDE" +} + +function main() { + var a = Number(properties.a); + var b = Number(properties.b); + switch (properties.operator) { + case OPERATORS.ADD: + nodeState.putShared("z", a + b); + break; + case OPERATORS.SUBTRACT: + nodeState.putShared("z", a - b); + break; + case OPERATORS.MULTIPLY: + nodeState.putShared("z", a * b); + break; + case OPERATORS.DIVIDE: + if (b == 0) throw new Error("Cannot divide by 0"); + nodeState.putShared("z", a / b); + break; + default: throw new Error("Unknown operator."); + } + action.goTo(SCRIPT_OUTCOMES.SUCCESS); +} + +main(); +" +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/ALU.nodeTypes.json 1`] = ` +{ + "meta": Any, + "nodeTypes": { + "c6063fb2f5dc42dd9772bedc93898bd8-1": { + "_id": "c6063fb2f5dc42dd9772bedc93898bd8-1", + "description": "Simple ALU that performs basic binary math operations. Expects an "x" and "y" value on the shared state, and will produce a new "z" value on the shared state as output.", + "displayName": "ALU", + "errorOutcome": true, + "inputs": [ + "x", + "y", + ], + "outcomes": [ + "Success", + ], + "outputs": [ + "z", + ], + "properties": { + "operator": { + "defaultValue": "ADD", + "description": "The operation to perform.", + "multivalued": false, + "options": { + "ADD": "+", + "DIVIDE": "/", + "MULTIPLY": "*", + "SUBTRACT": "-", + }, + "required": true, + "title": "Operator", + "type": "STRING", + }, + }, + "script": "file://ALU.nodeTypes.js", + "serviceName": "c6063fb2f5dc42dd9772bedc93898bd8", + "tags": [ + "math", + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/Display-Callback.nodeTypes.js 1`] = ` +"var SCRIPT_OUTCOMES = { + OUTCOME: 'outcome' +}; + +var CALLBACKS = { + BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK", + CHOICE_CALLBACK: "CHOICE_CALLBACK", + CONFIRMATION_CALLBACK: "CONFIRMATION_CALLBACK", + CONSENT_MAPPING_CALLBACK: "CONSENT_MAPPING_CALLBACK", + DEVICE_PROFILE_CALLBACK: "DEVICE_PROFILE_CALLBACK", + HIDDEN_VALUE_CALLBACK: "HIDDEN_VALUE_CALLBACK", + HTTP_CALLBACK: "HTTP_CALLBACK", + IDP_CALLBACK: "IDP_CALLBACK", + KBA_CREATE_CALLBACK: "KBA_CREATE_CALLBACK", + LANGUAGE_CALLBACK: "LANGUAGE_CALLBACK", + METADATA_CALLBACK: "METADATA_CALLBACK", + NAME_CALLBACK: "NAME_CALLBACK", + NUMBER_ATTRIBUTE_INPUT_CALLBACK: "NUMBER_ATTRIBUTE_INPUT_CALLBACK", + PASSWORD_CALLBACK: "PASSWORD_CALLBACK", + POLLING_WAIT_CALLBACK: "POLLING_WAIT_CALLBACK", + REDIRECT_CALLBACK: "REDIRECT_CALLBACK", + SCRIPT_TEXT_OUTPUT_CALLBACK: "SCRIPT_TEXT_OUTPUT_CALLBACK", + SELECT_IDP_CALLBACK: "SELECT_IDP_CALLBACK", + STRING_ATTRIBUTE_INPUT_CALLBACK: "STRING_ATTRIBUTE_INPUT_CALLBACK", + SUSPENDED_TEXT_OUTPUT_CALLBACK: "SUSPENDED_TEXT_OUTPUT_CALLBACK", + TERMS_AND_CONDITIONS_CALLBACK: "TERMS_AND_CONDITIONS_CALLBACK", + TEXT_INPUT_CALLBACK: "TEXT_INPUT_CALLBACK", + TEXT_OUTPUT_CALLBACK: "TEXT_OUTPUT_CALLBACK", + VALIDATED_PASSWORD_CALLBACK: "VALIDATED_PASSWORD_CALLBACK", + VALIDATED_USERNAME_CALLBACK: "VALIDATED_USERNAME_CALLBACK", + X509_CERTIFICATE_CALLBACK: "X509_CERTIFICATE_CALLBACK" +} + +function isStringPresent(value) { + return value; +} + +function getString(value) { + return value || ''; +} + +function isArrayPresent(value) { + return value; +} + +function getArray(value) { + return value ? JSON.parse(value) : []; +} + +function isObjectPresent(value) { + return value; +} + +function getObject(value) { + return value ? JSON.parse(value) : {}; +} + +function isIntPresent(value) { + return value; +} + +function getInt(value) { + return value ? parseInt(value) : 0; +} + +function isDoublePresent(value) { + return value; +} + +function getDouble(value) { + return value ? parseFloat(value) : 0.0; +} + +function isBooleanPresent(value) { + return value; +} + +function getBoolean(value) { + return value ? value.toLowerCase() === 'true' : false; +} + +function setProperty(value) { + if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value); + if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value); + if (properties.objectSharedProperty) { + var attributes = {}; + attributes[properties.objectSharedProperty] = value; + nodeState.mergeShared({ + objectAttributes: attributes + }); + } + if (properties.objectTransientProperty) { + var attributes = {}; + attributes[properties.objectTransientProperty] = value; + nodeState.mergeTransient({ + objectAttributes: attributes + }); + } +} + +function booleanAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getBoolean(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required); + } +} + +function choiceCallback() { + var prompt = getString(properties.options.prompt); + var choices = getArray(properties.options.choices); + var defaultChoice = getInt(properties.options.defaultChoice); + var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed); + callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed); +} + +function confirmationCallback() { + var prompt = getString(properties.options.prompt); + var messageType = getInt(properties.options.messageType); + var options = getArray(properties.options.options); + var optionType = getInt(properties.options.optionType); + var defaultOption = getInt(properties.options.defaultOption); + if (isStringPresent(properties.options.prompt)) { + if (isIntPresent(properties.options.optionType)) { + callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption); + } else { + callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption); + } + } else { + if (isIntPresent(properties.options.optionType)) { + callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption); + } else { + callbacksBuilder.confirmationCallback(messageType, options, defaultOption); + } + } +} + +function consentMappingCallback() { + var config = getObject(properties.options.config); + var message = getString(properties.options.message); + var isRequired = getBoolean(properties.options.isRequired); + var name = getString(properties.options.name); + var displayName = getString(properties.options.displayName); + var icon = getString(properties.options.icon); + var accessLevel = getString(properties.options.accessLevel); + var titles = getArray(properties.options.titles); + if (isObjectPresent(properties.options.prompt)) { + callbacksBuilder.consentMappingCallback(config, message, isRequired); + } else { + callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired); + } +} + +function deviceProfileCallback() { + var metadata = getBoolean(properties.options.metadata); + var location = getBoolean(properties.options.location); + var message = getString(properties.options.message); + callbacksBuilder.deviceProfileCallback(metadata, location, message); +} + +function hiddenValueCallback() { + var id = getString(properties.options.id); + var value = getString(properties.options.value); + callbacksBuilder.hiddenValueCallback(id, value); +} + +function httpCallback() { + var authorizationHeader = getString(properties.options.authorizationHeader); + var negotiationHeader = getString(properties.options.negotiationHeader); + var authRHeader = getString(properties.options.authRHeader); + var negoName = getString(properties.options.negoName); + var negoValue = getString(properties.options.negoValue); + if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) { + var errorCode = getString(properties.options.errorCode); + callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode); + } else { + var errorCode = getInt(properties.options.errorCode); + callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode); + } +} + +function idPCallback() { + var provider = getString(properties.options.provider); + var clientId = getString(properties.options.clientId); + var redirectUri = getString(properties.options.redirectUri); + var scope = getArray(properties.options.scope); + var nonce = getString(properties.options.nonce); + var request = getString(properties.options.request); + var requestUri = getString(properties.options.requestUri); + var acrValues = getArray(properties.options.acrValues); + var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo); + var token = getString(properties.options.token); + var tokenType = getString(properties.options.tokenType); + if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) { + callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType); + } else { + callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo); + } +} + +function kbaCreateCallback() { + var prompt = getString(properties.options.prompt); + var predefinedQuestions = getArray(properties.options.predefinedQuestions); + var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions); + callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions); +} + +function languageCallback() { + var language = getString(properties.options.language); + var country = getString(properties.options.country); + callbacksBuilder.languageCallback(language, country); +} + +function metadataCallback() { + var outputValue = getObject(properties.options.outputValue); + callbacksBuilder.metadataCallback(outputValue); +} + +function nameCallback() { + var prompt = getString(properties.options.prompt); + var defaultName = getString(properties.options.defaultName); + if (isStringPresent(properties.options.defaultName)) { + callbacksBuilder.nameCallback(prompt, defaultName); + } else { + callbacksBuilder.nameCallback(prompt); + } +} + +function numberAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getDouble(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required); + } +} + +function passwordCallback() { + var prompt = getString(properties.options.prompt); + var echoOn = getBoolean(properties.options.echoOn); + callbacksBuilder.passwordCallback(prompt, echoOn); +} + +function pollingWaitCallback() { + var waitTime = getString(properties.options.waitTime); + var message = getString(properties.options.message); + callbacksBuilder.pollingWaitCallback(waitTime, message); +} + +function redirectCallback() { + throw new Error('Not Implemented'); +} + +function scriptTextOutputCallback() { + var message = getString(properties.options.message); + callbacksBuilder.scriptTextOutputCallback(message); +} + +function selectIdPCallback() { + var providers = getObject(properties.options.providers); + callbacksBuilder.selectIdPCallback(providers); +} + +function stringAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getString(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required); + } +} + +function suspendedTextOutputCallback() { + var messageType = getInt(properties.options.messageType); + var message = getString(properties.options.message); + callbacksBuilder.suspendedTextOutputCallback(messageType, message); +} + +function termsAndConditionsCallback() { + var version = getString(properties.options.version); + var terms = getString(properties.options.terms); + var createDate = getString(properties.options.createDate); + callbacksBuilder.termsAndConditionsCallback(version, terms, createDate); +} + +function textInputCallback() { + var prompt = getString(properties.options.prompt); + var defaultText = getString(properties.options.defaultText); + if (isStringPresent(properties.options.defaultText)) { + callbacksBuilder.textInputCallback(prompt, defaultText); + } else { + callbacksBuilder.textInputCallback(prompt); + } +} + +function textOutputCallback() { + var messageType = getString(properties.options.messageType); + var message = getString(properties.options.message); + callbacksBuilder.textOutputCallback(messageType, message); +} + +function validatedPasswordCallback() { + var prompt = getString(properties.options.prompt); + var echoOn = getBoolean(properties.options.echoOn); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isArrayPresent(properties.options.failedPolicies)) { + callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly); + } +} + +function validatedUsernameCallback() { + var prompt = getString(properties.options.prompt); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isArrayPresent(properties.options.failedPolicies)) { + callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly); + } +} + +function x509CertificateCallback() { + throw new Error('Not Implemented'); +} + +function getBooleanAttributeInputCallback() { + setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0)); +} + +function getChoiceCallback() { + var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed); + var selections = callbacks.getChoiceCallbacks().get(0); + setProperty(multipleSelectionsAllowed ? selections : selections[0]); +} + +function getConfirmationCallback() { + setProperty(callbacks.getConfirmationCallbacks().get(0)); +} + +function getConsentMappingCallback() { + setProperty(callbacks.getConsentMappingCallbacks().get(0)); +} + +function getDeviceProfileCallback() { + setProperty(callbacks.getDeviceProfileCallbacks().get(0)); +} + +function getHiddenValueCallback() { + var id = getString(properties.options.id); + setProperty(callbacks.getHiddenValueCallbacks().get(id)); +} + +function getHttpCallback() { + setProperty(callbacks.getHttpCallbacks().get(0)); +} + +function getIdPCallback() { + setProperty(callbacks.getIdpCallbacks().get(0)); +} + +function getKbaCreateCallback() { + setProperty(callbacks.getKbaCreateCallbacks().get(0)); +} + +function getLanguageCallback() { + setProperty(callbacks.getLanguageCallbacks().get(0)); +} + +function getNameCallback() { + setProperty(callbacks.getNameCallbacks().get(0)); +} + +function getNumberAttributeInputCallback() { + setProperty(callbacks.getNumberAttributeInputCallbacks().get(0)); +} + +function getPasswordCallback() { + setProperty(callbacks.getPasswordCallbacks().get(0)); +} + +function getSelectIdPCallback() { + setProperty(callbacks.getSelectIdPCallbacks().get(0)); +} + +function getStringAttributeInputCallback() { + setProperty(callbacks.getStringAttributeInputCallbacks().get(0)); +} + +function getTermsAndConditionsCallback() { + setProperty(callbacks.getTermsAndConditionsCallbacks().get(0)); +} + +function getTextInputCallback() { + setProperty(callbacks.getTextInputCallbacks().get(0)); +} + +function getValidatedPasswordCallback() { + setProperty(callbacks.getValidatedPasswordCallbacks().get(0)); +} + +function getValidatedUsernameCallback() { + setProperty(callbacks.getValidatedUsernameCallbacks().get(0)); +} + +function getX509CertificateCallback() { + setProperty(callbacks.getX509CertificateCallbacks().get(0)); +} + +function main() { + if (!callbacks.isEmpty()) { + switch (properties.callback) { + case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break; + case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break; + case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break; + case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break; + case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break; + case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break; + case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break; + case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break; + case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break; + case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break; + case CALLBACKS.NAME_CALLBACK: getNameCallback(); break; + case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break; + case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break; + case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break; + case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break; + case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break; + case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break; + case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break; + case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break; + case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break; + default: break; + } + action.goTo(SCRIPT_OUTCOMES.OUTCOME); + return; + } + + switch (properties.callback) { + case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break; + case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break; + case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break; + case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break; + case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break; + case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break; + case CALLBACKS.HTTP_CALLBACK: httpCallback(); break; + case CALLBACKS.IDP_CALLBACK: idPCallback(); break; + case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break; + case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break; + case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break; + case CALLBACKS.NAME_CALLBACK: nameCallback(); break; + case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break; + case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break; + case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break; + case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break; + case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break; + case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break; + case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break; + case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break; + case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break; + case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break; + case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break; + case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break; + case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break; + case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break; + default: throw new Error('Unknown Callback'); // Should never reach this case + } +} + +main(); +" +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/Display-Callback.nodeTypes.json 1`] = ` +{ + "meta": Any, + "nodeTypes": { + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome", + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback", + }, + "required": true, + "title": "Callback", + "type": "STRING", + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING", + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING", + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). + +For example, for textOutputCallback, the options could be: { messageType: 0, message: "Hello World!" }. + +Note that for required parameters that are not specified in the options will use default values based on the type of the parameter ("" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT", + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING", + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING", + }, + }, + "script": "file://Display-Callback.nodeTypes.js", + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/Display-State.nodeTypes.js 1`] = ` +"var SCRIPT_OUTCOMES = { + OUTCOME: "outcome" +}; + +function main() { + if (!callbacks.isEmpty()) { + action.goTo(SCRIPT_OUTCOMES.OUTCOME); + return; + } + var keySet = nodeState.keys(); // Java Set + var keys = Array.from(keySet); // Make it into JavaScript array + debugState = {}; + for (var i in keys) { + var k = new String(keys[i]); + var item = nodeState.get(k); + if (typeof item === "object") { + debugState[k] = nodeState.getObject(k); + } else { + debugState[k] = nodeState.get(k); + } + } + if (properties.displayFormat === "JSON") { + callbacksBuilder.textOutputCallback(0, \`
\${JSON.stringify(debugState, null, 2)}
\`); + return; + } + callbacksBuilder.textOutputCallback(0, \`\${Array.from(Object.keys(debugState).map(k => \`\`))}
KeyValue
\${k}
\${debugState[k]}
\`); +} + +main(); +" +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/Display-State.nodeTypes.json 1`] = ` +{ + "meta": Any, + "nodeTypes": { + "8ab9f1aad4b4460a9c45d15fb148e221-1": { + "_id": "8ab9f1aad4b4460a9c45d15fb148e221-1", + "description": "Debug node that displays the shared and transient state of the journey for debugging purposes.", + "displayName": "Display State", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome", + ], + "outputs": [], + "properties": { + "displayFormat": { + "defaultValue": "TABLE", + "description": "The format in which to display the states.", + "multivalued": false, + "options": { + "JSON": "Raw JSON", + "TABLE": "HTML Table", + }, + "required": true, + "title": "Display Format", + "type": "STRING", + }, + }, + "script": "file://Display-State.nodeTypes.js", + "serviceName": "8ab9f1aad4b4460a9c45d15fb148e221", + "tags": [ + "debug", + "testing", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/Generate-JWT.nodeTypes.js 1`] = ` +"var aud = properties.audience; +var iss = properties.issuer; +var validity = properties.validity; +var esv = properties.signingkey; + +var signingkey = systemEnv.getProperty(esv); + +var username = nodeState.get("username"); + +var data = { + jwtType:"SIGNED", + jwsAlgorithm: "HS256", + issuer: iss, + subject: username, + audience: aud, + type: "JWT", + validityMinutes: validity, + signingKey: signingkey +}; + +var jwt = jwtAssertion.generateJwt(data); + +if (jwt !== null && jwt.length > 0) { + nodeState.putShared("assertionJwt" , jwt); + action.goTo("True"); +} else { + action.goTo("False"); +} +" +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/Generate-JWT.nodeTypes.json 1`] = ` +{ + "meta": Any, + "nodeTypes": { + "e5ad0110c8ee4dafaae983003cd05d4a-1": { + "_id": "e5ad0110c8ee4dafaae983003cd05d4a-1", + "description": "Generate a signed JWT using the HMAC SHA-256 algorithm.", + "displayName": "Generate JWT", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": { + "audience": { + "description": "The audience (aud) claim", + "multivalued": false, + "required": true, + "title": "Audience", + "type": "STRING", + }, + "issuer": { + "description": "The issuer (iss) claim", + "multivalued": false, + "required": true, + "title": "Issuer", + "type": "STRING", + }, + "signingkey": { + "defaultValue": "esv.signing.key", + "description": "The secret label for the HMAC signing key", + "multivalued": false, + "required": true, + "title": "HMAC Signing Key", + "type": "STRING", + }, + "validity": { + "defaultValue": 5, + "description": "", + "multivalued": false, + "required": true, + "title": "Validity (minutes)", + "type": "NUMBER", + }, + }, + "script": "file://Generate-JWT.nodeTypes.js", + "serviceName": "e5ad0110c8ee4dafaae983003cd05d4a", + "tags": [ + "Utilities", + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/Has-Session.nodeTypes.js 1`] = ` +"var SCRIPT_OUTCOMES = { + TRUE: 'True', + FALSE: 'False' +} + +function main() { + action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE); +} + +main(); +" +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/Has-Session.nodeTypes.json 1`] = ` +{ + "meta": Any, + "nodeTypes": { + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": {}, + "script": "file://Has-Session.nodeTypes.js", + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/Has-Session-AM.nodeTypes.js 1`] = ` +"var SCRIPT_OUTCOMES = { + TRUE: 'True', + FALSE: 'False' +} + +function main() { + action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE); +} + +main(); +" +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/Has-Session-AM.nodeTypes.json 1`] = ` +{ + "meta": Any, + "nodeTypes": { + "session-1": { + "_id": "session-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session AM", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": {}, + "script": "file://Has-Session-AM.nodeTypes.js", + "serviceName": "session", + "tags": [ + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/Vector-ALU.nodeTypes.js 1`] = ` +"var SCRIPT_OUTCOMES = { + SUCCESS: 'Success' +}; + +var OPERATORS = { + ADD: "ADD", + SUBTRACT: "SUBTRACT", + DOT: "DOT", + CROSS: "CROSS" +} + +function add(a, b) { + return a.map((v, i) => v + b[i]); +} + +function subtract(a, b) { + return a.map((v, i) => v - b[i]); +} + +function dot(a, b) { + return a.reduce((sum, v, i) => sum + v * b[i], 0); +} + +function cross(a, b) { + return [ + a[1] * b[2] - a[2] * b[1], + a[2] * b[0] - a[0] * b[2], + a[0] * b[1] - a[1] * b[0] + ]; +} + +function main() { + if (properties.a.length !== properties.b.length) throw new Error("Vectors not the same dimension."); + switch (properties.operator) { + case OPERATORS.ADD: + nodeState.putShared("c", add(properties.a, properties.b)); + break; + case OPERATORS.SUBTRACT: + nodeState.putShared("c", subtract(properties.a, properties.b)); + break; + case OPERATORS.DOT: + nodeState.putShared("c", dot(properties.a, properties.b)); + break; + case OPERATORS.CROSS: + if (properties.a.length !== 3) throw new Error("Vectors not dimension 3 for cross product"); + nodeState.putShared("c", cross(properties.a, properties.b)); + break; + default: throw new Error("Unknown operator."); + } + action.goTo(SCRIPT_OUTCOMES.SUCCESS); +} + +main(); +" +`; + +exports[`frodo node export "frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5: customNodeExportDir5/Vector-ALU.nodeTypes.json 1`] = ` +{ + "meta": Any, + "nodeTypes": { + "c15e2efb3deb4d4ea338c74a6440b69f-1": { + "_id": "c15e2efb3deb4d4ea338c74a6440b69f-1", + "description": "Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key "c".", + "displayName": "Vector ALU", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "Success", + ], + "outputs": [ + "c", + ], + "properties": { + "a": { + "defaultValue": [ + 1, + 2, + 3, + ], + "description": "Left vector operand", + "multivalued": true, + "required": true, + "title": "A", + "type": "NUMBER", + }, + "b": { + "defaultValue": [ + 4, + 5, + 6, + ], + "description": "Right vector operand", + "multivalued": true, + "required": true, + "title": "B", + "type": "NUMBER", + }, + "operator": { + "defaultValue": "DOT", + "description": "The binary operation to perform on the vectors.", + "multivalued": false, + "options": { + "ADD": "+", + "CROSS": "X", + "DOT": ".", + "SUBTRACT": "-", + }, + "required": true, + "title": "Operator", + "type": "STRING", + }, + }, + "script": "file://Vector-ALU.nodeTypes.js", + "serviceName": "c15e2efb3deb4d4ea338c74a6440b69f", + "tags": [ + "math", + "vector", + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export --node-id c605506774a848f7877b4d17a453bd39-1": should export the custom node with id "c605506774a848f7877b4d17a453bd39-1" 1`] = `0`; + +exports[`frodo node export "frodo node export --node-id c605506774a848f7877b4d17a453bd39-1": should export the custom node with id "c605506774a848f7877b4d17a453bd39-1" 2`] = `""`; + +exports[`frodo node export "frodo node export --node-id c605506774a848f7877b4d17a453bd39-1": should export the custom node with id "c605506774a848f7877b4d17a453bd39-1": c605506774a848f7877b4d17a453bd39-1.nodeTypes.json 1`] = ` +{ + "meta": Any, + "nodeTypes": { + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": {}, + "script": [ + "var SCRIPT_OUTCOMES = {", + " TRUE: 'True',", + " FALSE: 'False'", + "}", + "", + "function main() {", + " action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);", + "}", + "", + "main();", + "", + ], + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export --node-name 'Display Callback'": should export the custom node with display name "DisplayCallback" 1`] = `0`; + +exports[`frodo node export "frodo node export --node-name 'Display Callback'": should export the custom node with display name "DisplayCallback" 2`] = `""`; + +exports[`frodo node export "frodo node export --node-name 'Display Callback'": should export the custom node with display name "DisplayCallback": Display-Callback.nodeTypes.json 1`] = ` +{ + "meta": Any, + "nodeTypes": { + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome", + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback", + }, + "required": true, + "title": "Callback", + "type": "STRING", + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING", + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING", + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). + +For example, for textOutputCallback, the options could be: { messageType: 0, message: "Hello World!" }. + +Note that for required parameters that are not specified in the options will use default values based on the type of the parameter ("" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT", + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING", + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING", + }, + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " OUTCOME: 'outcome'", + "};", + "", + "var CALLBACKS = {", + " BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK",", + " CHOICE_CALLBACK: "CHOICE_CALLBACK",", + " CONFIRMATION_CALLBACK: "CONFIRMATION_CALLBACK",", + " CONSENT_MAPPING_CALLBACK: "CONSENT_MAPPING_CALLBACK",", + " DEVICE_PROFILE_CALLBACK: "DEVICE_PROFILE_CALLBACK",", + " HIDDEN_VALUE_CALLBACK: "HIDDEN_VALUE_CALLBACK",", + " HTTP_CALLBACK: "HTTP_CALLBACK",", + " IDP_CALLBACK: "IDP_CALLBACK",", + " KBA_CREATE_CALLBACK: "KBA_CREATE_CALLBACK",", + " LANGUAGE_CALLBACK: "LANGUAGE_CALLBACK",", + " METADATA_CALLBACK: "METADATA_CALLBACK",", + " NAME_CALLBACK: "NAME_CALLBACK",", + " NUMBER_ATTRIBUTE_INPUT_CALLBACK: "NUMBER_ATTRIBUTE_INPUT_CALLBACK",", + " PASSWORD_CALLBACK: "PASSWORD_CALLBACK",", + " POLLING_WAIT_CALLBACK: "POLLING_WAIT_CALLBACK",", + " REDIRECT_CALLBACK: "REDIRECT_CALLBACK",", + " SCRIPT_TEXT_OUTPUT_CALLBACK: "SCRIPT_TEXT_OUTPUT_CALLBACK",", + " SELECT_IDP_CALLBACK: "SELECT_IDP_CALLBACK",", + " STRING_ATTRIBUTE_INPUT_CALLBACK: "STRING_ATTRIBUTE_INPUT_CALLBACK",", + " SUSPENDED_TEXT_OUTPUT_CALLBACK: "SUSPENDED_TEXT_OUTPUT_CALLBACK",", + " TERMS_AND_CONDITIONS_CALLBACK: "TERMS_AND_CONDITIONS_CALLBACK",", + " TEXT_INPUT_CALLBACK: "TEXT_INPUT_CALLBACK",", + " TEXT_OUTPUT_CALLBACK: "TEXT_OUTPUT_CALLBACK",", + " VALIDATED_PASSWORD_CALLBACK: "VALIDATED_PASSWORD_CALLBACK",", + " VALIDATED_USERNAME_CALLBACK: "VALIDATED_USERNAME_CALLBACK",", + " X509_CERTIFICATE_CALLBACK: "X509_CERTIFICATE_CALLBACK"", + "}", + "", + "function isStringPresent(value) {", + " return value;", + "}", + "", + "function getString(value) {", + " return value || '';", + "}", + "", + "function isArrayPresent(value) {", + " return value;", + "}", + "", + "function getArray(value) {", + " return value ? JSON.parse(value) : [];", + "}", + "", + "function isObjectPresent(value) {", + " return value;", + "}", + "", + "function getObject(value) {", + " return value ? JSON.parse(value) : {};", + "}", + "", + "function isIntPresent(value) {", + " return value;", + "}", + "", + "function getInt(value) {", + " return value ? parseInt(value) : 0;", + "}", + "", + "function isDoublePresent(value) {", + " return value;", + "}", + "", + "function getDouble(value) {", + " return value ? parseFloat(value) : 0.0;", + "}", + "", + "function isBooleanPresent(value) {", + " return value;", + "}", + "", + "function getBoolean(value) {", + " return value ? value.toLowerCase() === 'true' : false;", + "}", + "", + "function setProperty(value) {", + " if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);", + " if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);", + " if (properties.objectSharedProperty) {", + " var attributes = {};", + " attributes[properties.objectSharedProperty] = value;", + " nodeState.mergeShared({", + " objectAttributes: attributes", + " });", + " }", + " if (properties.objectTransientProperty) {", + " var attributes = {};", + " attributes[properties.objectTransientProperty] = value;", + " nodeState.mergeTransient({", + " objectAttributes: attributes", + " });", + " }", + "}", + "", + "function booleanAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getBoolean(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function choiceCallback() {", + " var prompt = getString(properties.options.prompt);", + " var choices = getArray(properties.options.choices);", + " var defaultChoice = getInt(properties.options.defaultChoice);", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);", + "}", + "", + "function confirmationCallback() {", + " var prompt = getString(properties.options.prompt);", + " var messageType = getInt(properties.options.messageType);", + " var options = getArray(properties.options.options);", + " var optionType = getInt(properties.options.optionType);", + " var defaultOption = getInt(properties.options.defaultOption);", + " if (isStringPresent(properties.options.prompt)) {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);", + " }", + " } else {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(messageType, options, defaultOption);", + " }", + " }", + "}", + "", + "function consentMappingCallback() {", + " var config = getObject(properties.options.config);", + " var message = getString(properties.options.message);", + " var isRequired = getBoolean(properties.options.isRequired);", + " var name = getString(properties.options.name);", + " var displayName = getString(properties.options.displayName);", + " var icon = getString(properties.options.icon);", + " var accessLevel = getString(properties.options.accessLevel);", + " var titles = getArray(properties.options.titles);", + " if (isObjectPresent(properties.options.prompt)) {", + " callbacksBuilder.consentMappingCallback(config, message, isRequired);", + " } else {", + " callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);", + " }", + "}", + "", + "function deviceProfileCallback() {", + " var metadata = getBoolean(properties.options.metadata);", + " var location = getBoolean(properties.options.location);", + " var message = getString(properties.options.message);", + " callbacksBuilder.deviceProfileCallback(metadata, location, message);", + "}", + "", + "function hiddenValueCallback() {", + " var id = getString(properties.options.id);", + " var value = getString(properties.options.value);", + " callbacksBuilder.hiddenValueCallback(id, value);", + "}", + "", + "function httpCallback() {", + " var authorizationHeader = getString(properties.options.authorizationHeader);", + " var negotiationHeader = getString(properties.options.negotiationHeader);", + " var authRHeader = getString(properties.options.authRHeader);", + " var negoName = getString(properties.options.negoName);", + " var negoValue = getString(properties.options.negoValue);", + " if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {", + " var errorCode = getString(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);", + " } else {", + " var errorCode = getInt(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);", + " }", + "}", + "", + "function idPCallback() {", + " var provider = getString(properties.options.provider);", + " var clientId = getString(properties.options.clientId);", + " var redirectUri = getString(properties.options.redirectUri);", + " var scope = getArray(properties.options.scope);", + " var nonce = getString(properties.options.nonce);", + " var request = getString(properties.options.request);", + " var requestUri = getString(properties.options.requestUri);", + " var acrValues = getArray(properties.options.acrValues);", + " var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);", + " var token = getString(properties.options.token);", + " var tokenType = getString(properties.options.tokenType);", + " if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);", + " } else {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);", + " }", + "}", + "", + "function kbaCreateCallback() {", + " var prompt = getString(properties.options.prompt);", + " var predefinedQuestions = getArray(properties.options.predefinedQuestions);", + " var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);", + " callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);", + "}", + "", + "function languageCallback() {", + " var language = getString(properties.options.language);", + " var country = getString(properties.options.country);", + " callbacksBuilder.languageCallback(language, country);", + "}", + "", + "function metadataCallback() {", + " var outputValue = getObject(properties.options.outputValue);", + " callbacksBuilder.metadataCallback(outputValue);", + "}", + "", + "function nameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultName = getString(properties.options.defaultName);", + " if (isStringPresent(properties.options.defaultName)) {", + " callbacksBuilder.nameCallback(prompt, defaultName);", + " } else {", + " callbacksBuilder.nameCallback(prompt);", + " }", + "}", + "", + "function numberAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getDouble(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function passwordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " callbacksBuilder.passwordCallback(prompt, echoOn);", + "}", + "", + "function pollingWaitCallback() {", + " var waitTime = getString(properties.options.waitTime);", + " var message = getString(properties.options.message);", + " callbacksBuilder.pollingWaitCallback(waitTime, message);", + "}", + "", + "function redirectCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function scriptTextOutputCallback() {", + " var message = getString(properties.options.message);", + " callbacksBuilder.scriptTextOutputCallback(message);", + "}", + "", + "function selectIdPCallback() {", + " var providers = getObject(properties.options.providers);", + " callbacksBuilder.selectIdPCallback(providers);", + "}", + "", + "function stringAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getString(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function suspendedTextOutputCallback() {", + " var messageType = getInt(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.suspendedTextOutputCallback(messageType, message);", + "}", + "", + "function termsAndConditionsCallback() {", + " var version = getString(properties.options.version);", + " var terms = getString(properties.options.terms);", + " var createDate = getString(properties.options.createDate);", + " callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);", + "}", + "", + "function textInputCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultText = getString(properties.options.defaultText);", + " if (isStringPresent(properties.options.defaultText)) {", + " callbacksBuilder.textInputCallback(prompt, defaultText);", + " } else {", + " callbacksBuilder.textInputCallback(prompt);", + " }", + "}", + "", + "function textOutputCallback() {", + " var messageType = getString(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.textOutputCallback(messageType, message);", + "}", + "", + "function validatedPasswordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);", + " }", + "}", + "", + "function validatedUsernameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);", + " }", + "}", + "", + "function x509CertificateCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function getBooleanAttributeInputCallback() {", + " setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));", + "}", + "", + "function getChoiceCallback() {", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " var selections = callbacks.getChoiceCallbacks().get(0);", + " setProperty(multipleSelectionsAllowed ? selections : selections[0]);", + "}", + "", + "function getConfirmationCallback() {", + " setProperty(callbacks.getConfirmationCallbacks().get(0));", + "}", + "", + "function getConsentMappingCallback() {", + " setProperty(callbacks.getConsentMappingCallbacks().get(0));", + "}", + "", + "function getDeviceProfileCallback() {", + " setProperty(callbacks.getDeviceProfileCallbacks().get(0));", + "}", + "", + "function getHiddenValueCallback() {", + " var id = getString(properties.options.id);", + " setProperty(callbacks.getHiddenValueCallbacks().get(id));", + "}", + "", + "function getHttpCallback() {", + " setProperty(callbacks.getHttpCallbacks().get(0));", + "}", + "", + "function getIdPCallback() {", + " setProperty(callbacks.getIdpCallbacks().get(0));", + "}", + "", + "function getKbaCreateCallback() {", + " setProperty(callbacks.getKbaCreateCallbacks().get(0));", + "}", + "", + "function getLanguageCallback() {", + " setProperty(callbacks.getLanguageCallbacks().get(0));", + "}", + "", + "function getNameCallback() {", + " setProperty(callbacks.getNameCallbacks().get(0));", + "}", + "", + "function getNumberAttributeInputCallback() {", + " setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));", + "}", + "", + "function getPasswordCallback() {", + " setProperty(callbacks.getPasswordCallbacks().get(0));", + "}", + "", + "function getSelectIdPCallback() {", + " setProperty(callbacks.getSelectIdPCallbacks().get(0));", + "}", + "", + "function getStringAttributeInputCallback() {", + " setProperty(callbacks.getStringAttributeInputCallbacks().get(0));", + "}", + "", + "function getTermsAndConditionsCallback() {", + " setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));", + "}", + "", + "function getTextInputCallback() {", + " setProperty(callbacks.getTextInputCallbacks().get(0));", + "}", + "", + "function getValidatedPasswordCallback() {", + " setProperty(callbacks.getValidatedPasswordCallbacks().get(0));", + "}", + "", + "function getValidatedUsernameCallback() {", + " setProperty(callbacks.getValidatedUsernameCallbacks().get(0));", + "}", + "", + "function getX509CertificateCallback() {", + " setProperty(callbacks.getX509CertificateCallbacks().get(0));", + "}", + "", + "function main() {", + " if (!callbacks.isEmpty()) {", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;", + " default: break;", + " }", + " action.goTo(SCRIPT_OUTCOMES.OUTCOME);", + " return;", + " }", + "", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: idPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;", + " case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: nameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;", + " case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;", + " case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;", + " case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;", + " case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;", + " case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;", + " default: throw new Error('Unknown Callback'); // Should never reach this case", + " }", + "}", + "", + "main();", + "", + ], + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export -AND customNodeExportDir4": should export all nodes into separate files with no metadata in the directory customNodeExportDir4 1`] = `0`; + +exports[`frodo node export "frodo node export -AND customNodeExportDir4": should export all nodes into separate files with no metadata in the directory customNodeExportDir4 2`] = `""`; + +exports[`frodo node export "frodo node export -AND customNodeExportDir4": should export all nodes into separate files with no metadata in the directory customNodeExportDir4: customNodeExportDir4/ALU.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "c6063fb2f5dc42dd9772bedc93898bd8-1": { + "_id": "c6063fb2f5dc42dd9772bedc93898bd8-1", + "description": "Simple ALU that performs basic binary math operations. Expects an "x" and "y" value on the shared state, and will produce a new "z" value on the shared state as output.", + "displayName": "ALU", + "errorOutcome": true, + "inputs": [ + "x", + "y", + ], + "outcomes": [ + "Success", + ], + "outputs": [ + "z", + ], + "properties": { + "operator": { + "defaultValue": "ADD", + "description": "The operation to perform.", + "multivalued": false, + "options": { + "ADD": "+", + "DIVIDE": "/", + "MULTIPLY": "*", + "SUBTRACT": "-", + }, + "required": true, + "title": "Operator", + "type": "STRING", + }, + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " SUCCESS: 'Success'", + "};", + "", + "var OPERATORS = {", + " ADD: "ADD",", + " SUBTRACT: "SUBTRACT",", + " MULTIPLY: "MULTIPLY",", + " DIVIDE: "DIVIDE"", + "}", + "", + "function main() {", + " var a = Number(properties.a);", + " var b = Number(properties.b);", + " switch (properties.operator) {", + " case OPERATORS.ADD:", + " nodeState.putShared("z", a + b);", + " break;", + " case OPERATORS.SUBTRACT:", + " nodeState.putShared("z", a - b);", + " break;", + " case OPERATORS.MULTIPLY:", + " nodeState.putShared("z", a * b);", + " break;", + " case OPERATORS.DIVIDE:", + " if (b == 0) throw new Error("Cannot divide by 0");", + " nodeState.putShared("z", a / b);", + " break;", + " default: throw new Error("Unknown operator.");", + " }", + " action.goTo(SCRIPT_OUTCOMES.SUCCESS);", + "}", + "", + "main();", + "", + ], + "serviceName": "c6063fb2f5dc42dd9772bedc93898bd8", + "tags": [ + "math", + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export -AND customNodeExportDir4": should export all nodes into separate files with no metadata in the directory customNodeExportDir4: customNodeExportDir4/Display-Callback.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome", + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback", + }, + "required": true, + "title": "Callback", + "type": "STRING", + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING", + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING", + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). + +For example, for textOutputCallback, the options could be: { messageType: 0, message: "Hello World!" }. + +Note that for required parameters that are not specified in the options will use default values based on the type of the parameter ("" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT", + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING", + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING", + }, + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " OUTCOME: 'outcome'", + "};", + "", + "var CALLBACKS = {", + " BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK",", + " CHOICE_CALLBACK: "CHOICE_CALLBACK",", + " CONFIRMATION_CALLBACK: "CONFIRMATION_CALLBACK",", + " CONSENT_MAPPING_CALLBACK: "CONSENT_MAPPING_CALLBACK",", + " DEVICE_PROFILE_CALLBACK: "DEVICE_PROFILE_CALLBACK",", + " HIDDEN_VALUE_CALLBACK: "HIDDEN_VALUE_CALLBACK",", + " HTTP_CALLBACK: "HTTP_CALLBACK",", + " IDP_CALLBACK: "IDP_CALLBACK",", + " KBA_CREATE_CALLBACK: "KBA_CREATE_CALLBACK",", + " LANGUAGE_CALLBACK: "LANGUAGE_CALLBACK",", + " METADATA_CALLBACK: "METADATA_CALLBACK",", + " NAME_CALLBACK: "NAME_CALLBACK",", + " NUMBER_ATTRIBUTE_INPUT_CALLBACK: "NUMBER_ATTRIBUTE_INPUT_CALLBACK",", + " PASSWORD_CALLBACK: "PASSWORD_CALLBACK",", + " POLLING_WAIT_CALLBACK: "POLLING_WAIT_CALLBACK",", + " REDIRECT_CALLBACK: "REDIRECT_CALLBACK",", + " SCRIPT_TEXT_OUTPUT_CALLBACK: "SCRIPT_TEXT_OUTPUT_CALLBACK",", + " SELECT_IDP_CALLBACK: "SELECT_IDP_CALLBACK",", + " STRING_ATTRIBUTE_INPUT_CALLBACK: "STRING_ATTRIBUTE_INPUT_CALLBACK",", + " SUSPENDED_TEXT_OUTPUT_CALLBACK: "SUSPENDED_TEXT_OUTPUT_CALLBACK",", + " TERMS_AND_CONDITIONS_CALLBACK: "TERMS_AND_CONDITIONS_CALLBACK",", + " TEXT_INPUT_CALLBACK: "TEXT_INPUT_CALLBACK",", + " TEXT_OUTPUT_CALLBACK: "TEXT_OUTPUT_CALLBACK",", + " VALIDATED_PASSWORD_CALLBACK: "VALIDATED_PASSWORD_CALLBACK",", + " VALIDATED_USERNAME_CALLBACK: "VALIDATED_USERNAME_CALLBACK",", + " X509_CERTIFICATE_CALLBACK: "X509_CERTIFICATE_CALLBACK"", + "}", + "", + "function isStringPresent(value) {", + " return value;", + "}", + "", + "function getString(value) {", + " return value || '';", + "}", + "", + "function isArrayPresent(value) {", + " return value;", + "}", + "", + "function getArray(value) {", + " return value ? JSON.parse(value) : [];", + "}", + "", + "function isObjectPresent(value) {", + " return value;", + "}", + "", + "function getObject(value) {", + " return value ? JSON.parse(value) : {};", + "}", + "", + "function isIntPresent(value) {", + " return value;", + "}", + "", + "function getInt(value) {", + " return value ? parseInt(value) : 0;", + "}", + "", + "function isDoublePresent(value) {", + " return value;", + "}", + "", + "function getDouble(value) {", + " return value ? parseFloat(value) : 0.0;", + "}", + "", + "function isBooleanPresent(value) {", + " return value;", + "}", + "", + "function getBoolean(value) {", + " return value ? value.toLowerCase() === 'true' : false;", + "}", + "", + "function setProperty(value) {", + " if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);", + " if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);", + " if (properties.objectSharedProperty) {", + " var attributes = {};", + " attributes[properties.objectSharedProperty] = value;", + " nodeState.mergeShared({", + " objectAttributes: attributes", + " });", + " }", + " if (properties.objectTransientProperty) {", + " var attributes = {};", + " attributes[properties.objectTransientProperty] = value;", + " nodeState.mergeTransient({", + " objectAttributes: attributes", + " });", + " }", + "}", + "", + "function booleanAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getBoolean(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function choiceCallback() {", + " var prompt = getString(properties.options.prompt);", + " var choices = getArray(properties.options.choices);", + " var defaultChoice = getInt(properties.options.defaultChoice);", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);", + "}", + "", + "function confirmationCallback() {", + " var prompt = getString(properties.options.prompt);", + " var messageType = getInt(properties.options.messageType);", + " var options = getArray(properties.options.options);", + " var optionType = getInt(properties.options.optionType);", + " var defaultOption = getInt(properties.options.defaultOption);", + " if (isStringPresent(properties.options.prompt)) {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);", + " }", + " } else {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(messageType, options, defaultOption);", + " }", + " }", + "}", + "", + "function consentMappingCallback() {", + " var config = getObject(properties.options.config);", + " var message = getString(properties.options.message);", + " var isRequired = getBoolean(properties.options.isRequired);", + " var name = getString(properties.options.name);", + " var displayName = getString(properties.options.displayName);", + " var icon = getString(properties.options.icon);", + " var accessLevel = getString(properties.options.accessLevel);", + " var titles = getArray(properties.options.titles);", + " if (isObjectPresent(properties.options.prompt)) {", + " callbacksBuilder.consentMappingCallback(config, message, isRequired);", + " } else {", + " callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);", + " }", + "}", + "", + "function deviceProfileCallback() {", + " var metadata = getBoolean(properties.options.metadata);", + " var location = getBoolean(properties.options.location);", + " var message = getString(properties.options.message);", + " callbacksBuilder.deviceProfileCallback(metadata, location, message);", + "}", + "", + "function hiddenValueCallback() {", + " var id = getString(properties.options.id);", + " var value = getString(properties.options.value);", + " callbacksBuilder.hiddenValueCallback(id, value);", + "}", + "", + "function httpCallback() {", + " var authorizationHeader = getString(properties.options.authorizationHeader);", + " var negotiationHeader = getString(properties.options.negotiationHeader);", + " var authRHeader = getString(properties.options.authRHeader);", + " var negoName = getString(properties.options.negoName);", + " var negoValue = getString(properties.options.negoValue);", + " if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {", + " var errorCode = getString(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);", + " } else {", + " var errorCode = getInt(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);", + " }", + "}", + "", + "function idPCallback() {", + " var provider = getString(properties.options.provider);", + " var clientId = getString(properties.options.clientId);", + " var redirectUri = getString(properties.options.redirectUri);", + " var scope = getArray(properties.options.scope);", + " var nonce = getString(properties.options.nonce);", + " var request = getString(properties.options.request);", + " var requestUri = getString(properties.options.requestUri);", + " var acrValues = getArray(properties.options.acrValues);", + " var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);", + " var token = getString(properties.options.token);", + " var tokenType = getString(properties.options.tokenType);", + " if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);", + " } else {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);", + " }", + "}", + "", + "function kbaCreateCallback() {", + " var prompt = getString(properties.options.prompt);", + " var predefinedQuestions = getArray(properties.options.predefinedQuestions);", + " var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);", + " callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);", + "}", + "", + "function languageCallback() {", + " var language = getString(properties.options.language);", + " var country = getString(properties.options.country);", + " callbacksBuilder.languageCallback(language, country);", + "}", + "", + "function metadataCallback() {", + " var outputValue = getObject(properties.options.outputValue);", + " callbacksBuilder.metadataCallback(outputValue);", + "}", + "", + "function nameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultName = getString(properties.options.defaultName);", + " if (isStringPresent(properties.options.defaultName)) {", + " callbacksBuilder.nameCallback(prompt, defaultName);", + " } else {", + " callbacksBuilder.nameCallback(prompt);", + " }", + "}", + "", + "function numberAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getDouble(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function passwordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " callbacksBuilder.passwordCallback(prompt, echoOn);", + "}", + "", + "function pollingWaitCallback() {", + " var waitTime = getString(properties.options.waitTime);", + " var message = getString(properties.options.message);", + " callbacksBuilder.pollingWaitCallback(waitTime, message);", + "}", + "", + "function redirectCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function scriptTextOutputCallback() {", + " var message = getString(properties.options.message);", + " callbacksBuilder.scriptTextOutputCallback(message);", + "}", + "", + "function selectIdPCallback() {", + " var providers = getObject(properties.options.providers);", + " callbacksBuilder.selectIdPCallback(providers);", + "}", + "", + "function stringAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getString(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function suspendedTextOutputCallback() {", + " var messageType = getInt(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.suspendedTextOutputCallback(messageType, message);", + "}", + "", + "function termsAndConditionsCallback() {", + " var version = getString(properties.options.version);", + " var terms = getString(properties.options.terms);", + " var createDate = getString(properties.options.createDate);", + " callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);", + "}", + "", + "function textInputCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultText = getString(properties.options.defaultText);", + " if (isStringPresent(properties.options.defaultText)) {", + " callbacksBuilder.textInputCallback(prompt, defaultText);", + " } else {", + " callbacksBuilder.textInputCallback(prompt);", + " }", + "}", + "", + "function textOutputCallback() {", + " var messageType = getString(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.textOutputCallback(messageType, message);", + "}", + "", + "function validatedPasswordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);", + " }", + "}", + "", + "function validatedUsernameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);", + " }", + "}", + "", + "function x509CertificateCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function getBooleanAttributeInputCallback() {", + " setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));", + "}", + "", + "function getChoiceCallback() {", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " var selections = callbacks.getChoiceCallbacks().get(0);", + " setProperty(multipleSelectionsAllowed ? selections : selections[0]);", + "}", + "", + "function getConfirmationCallback() {", + " setProperty(callbacks.getConfirmationCallbacks().get(0));", + "}", + "", + "function getConsentMappingCallback() {", + " setProperty(callbacks.getConsentMappingCallbacks().get(0));", + "}", + "", + "function getDeviceProfileCallback() {", + " setProperty(callbacks.getDeviceProfileCallbacks().get(0));", + "}", + "", + "function getHiddenValueCallback() {", + " var id = getString(properties.options.id);", + " setProperty(callbacks.getHiddenValueCallbacks().get(id));", + "}", + "", + "function getHttpCallback() {", + " setProperty(callbacks.getHttpCallbacks().get(0));", + "}", + "", + "function getIdPCallback() {", + " setProperty(callbacks.getIdpCallbacks().get(0));", + "}", + "", + "function getKbaCreateCallback() {", + " setProperty(callbacks.getKbaCreateCallbacks().get(0));", + "}", + "", + "function getLanguageCallback() {", + " setProperty(callbacks.getLanguageCallbacks().get(0));", + "}", + "", + "function getNameCallback() {", + " setProperty(callbacks.getNameCallbacks().get(0));", + "}", + "", + "function getNumberAttributeInputCallback() {", + " setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));", + "}", + "", + "function getPasswordCallback() {", + " setProperty(callbacks.getPasswordCallbacks().get(0));", + "}", + "", + "function getSelectIdPCallback() {", + " setProperty(callbacks.getSelectIdPCallbacks().get(0));", + "}", + "", + "function getStringAttributeInputCallback() {", + " setProperty(callbacks.getStringAttributeInputCallbacks().get(0));", + "}", + "", + "function getTermsAndConditionsCallback() {", + " setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));", + "}", + "", + "function getTextInputCallback() {", + " setProperty(callbacks.getTextInputCallbacks().get(0));", + "}", + "", + "function getValidatedPasswordCallback() {", + " setProperty(callbacks.getValidatedPasswordCallbacks().get(0));", + "}", + "", + "function getValidatedUsernameCallback() {", + " setProperty(callbacks.getValidatedUsernameCallbacks().get(0));", + "}", + "", + "function getX509CertificateCallback() {", + " setProperty(callbacks.getX509CertificateCallbacks().get(0));", + "}", + "", + "function main() {", + " if (!callbacks.isEmpty()) {", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;", + " default: break;", + " }", + " action.goTo(SCRIPT_OUTCOMES.OUTCOME);", + " return;", + " }", + "", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: idPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;", + " case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: nameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;", + " case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;", + " case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;", + " case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;", + " case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;", + " case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;", + " default: throw new Error('Unknown Callback'); // Should never reach this case", + " }", + "}", + "", + "main();", + "", + ], + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export -AND customNodeExportDir4": should export all nodes into separate files with no metadata in the directory customNodeExportDir4: customNodeExportDir4/Display-State.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "8ab9f1aad4b4460a9c45d15fb148e221-1": { + "_id": "8ab9f1aad4b4460a9c45d15fb148e221-1", + "description": "Debug node that displays the shared and transient state of the journey for debugging purposes.", + "displayName": "Display State", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome", + ], + "outputs": [], + "properties": { + "displayFormat": { + "defaultValue": "TABLE", + "description": "The format in which to display the states.", + "multivalued": false, + "options": { + "JSON": "Raw JSON", + "TABLE": "HTML Table", + }, + "required": true, + "title": "Display Format", + "type": "STRING", + }, + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " OUTCOME: "outcome"", + "};", + "", + "function main() {", + " if (!callbacks.isEmpty()) {", + " action.goTo(SCRIPT_OUTCOMES.OUTCOME);", + " return;", + " }", + " var keySet = nodeState.keys(); // Java Set", + " var keys = Array.from(keySet); // Make it into JavaScript array", + " debugState = {};", + " for (var i in keys) {", + " var k = new String(keys[i]);", + " var item = nodeState.get(k);", + " if (typeof item === "object") {", + " debugState[k] = nodeState.getObject(k);", + " } else {", + " debugState[k] = nodeState.get(k);", + " }", + " }", + " if (properties.displayFormat === "JSON") {", + " callbacksBuilder.textOutputCallback(0, \`
\${JSON.stringify(debugState, null, 2)}
\`);", + " return;", + " }", + " callbacksBuilder.textOutputCallback(0, \`\${Array.from(Object.keys(debugState).map(k => \`\`))}
KeyValue
\${k}
\${debugState[k]}
\`);", + "}", + "", + "main();", + "", + ], + "serviceName": "8ab9f1aad4b4460a9c45d15fb148e221", + "tags": [ + "debug", + "testing", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export -AND customNodeExportDir4": should export all nodes into separate files with no metadata in the directory customNodeExportDir4: customNodeExportDir4/Generate-JWT.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "e5ad0110c8ee4dafaae983003cd05d4a-1": { + "_id": "e5ad0110c8ee4dafaae983003cd05d4a-1", + "description": "Generate a signed JWT using the HMAC SHA-256 algorithm.", + "displayName": "Generate JWT", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": { + "audience": { + "description": "The audience (aud) claim", + "multivalued": false, + "required": true, + "title": "Audience", + "type": "STRING", + }, + "issuer": { + "description": "The issuer (iss) claim", + "multivalued": false, + "required": true, + "title": "Issuer", + "type": "STRING", + }, + "signingkey": { + "defaultValue": "esv.signing.key", + "description": "The secret label for the HMAC signing key", + "multivalued": false, + "required": true, + "title": "HMAC Signing Key", + "type": "STRING", + }, + "validity": { + "defaultValue": 5, + "description": "", + "multivalued": false, + "required": true, + "title": "Validity (minutes)", + "type": "NUMBER", + }, + }, + "script": [ + "var aud = properties.audience;", + "var iss = properties.issuer;", + "var validity = properties.validity;", + "var esv = properties.signingkey;", + "", + "var signingkey = systemEnv.getProperty(esv);", + "", + "var username = nodeState.get("username");", + "", + "var data = {", + " jwtType:"SIGNED",", + " jwsAlgorithm: "HS256",", + " issuer: iss,", + " subject: username,", + " audience: aud,", + " type: "JWT",", + " validityMinutes: validity,", + " signingKey: signingkey", + "};", + "", + "var jwt = jwtAssertion.generateJwt(data);", + "", + "if (jwt !== null && jwt.length > 0) {", + " nodeState.putShared("assertionJwt" , jwt);", + " action.goTo("True");", + "} else {", + " action.goTo("False");", + "}", + ], + "serviceName": "e5ad0110c8ee4dafaae983003cd05d4a", + "tags": [ + "Utilities", + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export -AND customNodeExportDir4": should export all nodes into separate files with no metadata in the directory customNodeExportDir4: customNodeExportDir4/Has-Session.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": {}, + "script": [ + "var SCRIPT_OUTCOMES = {", + " TRUE: 'True',", + " FALSE: 'False'", + "}", + "", + "function main() {", + " action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);", + "}", + "", + "main();", + "", + ], + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export -AND customNodeExportDir4": should export all nodes into separate files with no metadata in the directory customNodeExportDir4: customNodeExportDir4/Has-Session-AM.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "session-1": { + "_id": "session-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session AM", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": {}, + "script": [ + "var SCRIPT_OUTCOMES = {", + " TRUE: 'True',", + " FALSE: 'False'", + "}", + "", + "function main() {", + " action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);", + "}", + "", + "main();", + "", + ], + "serviceName": "session", + "tags": [ + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export -AND customNodeExportDir4": should export all nodes into separate files with no metadata in the directory customNodeExportDir4: customNodeExportDir4/Vector-ALU.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "c15e2efb3deb4d4ea338c74a6440b69f-1": { + "_id": "c15e2efb3deb4d4ea338c74a6440b69f-1", + "description": "Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key "c".", + "displayName": "Vector ALU", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "Success", + ], + "outputs": [ + "c", + ], + "properties": { + "a": { + "defaultValue": [ + 1, + 2, + 3, + ], + "description": "Left vector operand", + "multivalued": true, + "required": true, + "title": "A", + "type": "NUMBER", + }, + "b": { + "defaultValue": [ + 4, + 5, + 6, + ], + "description": "Right vector operand", + "multivalued": true, + "required": true, + "title": "B", + "type": "NUMBER", + }, + "operator": { + "defaultValue": "DOT", + "description": "The binary operation to perform on the vectors.", + "multivalued": false, + "options": { + "ADD": "+", + "CROSS": "X", + "DOT": ".", + "SUBTRACT": "-", + }, + "required": true, + "title": "Operator", + "type": "STRING", + }, + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " SUCCESS: 'Success'", + "};", + "", + "var OPERATORS = {", + " ADD: "ADD",", + " SUBTRACT: "SUBTRACT",", + " DOT: "DOT",", + " CROSS: "CROSS"", + "}", + "", + "function add(a, b) {", + " return a.map((v, i) => v + b[i]);", + "}", + "", + "function subtract(a, b) {", + " return a.map((v, i) => v - b[i]);", + "}", + "", + "function dot(a, b) {", + " return a.reduce((sum, v, i) => sum + v * b[i], 0);", + "}", + "", + "function cross(a, b) {", + " return [", + " a[1] * b[2] - a[2] * b[1],", + " a[2] * b[0] - a[0] * b[2],", + " a[0] * b[1] - a[1] * b[0]", + " ];", + "}", + "", + "function main() {", + " if (properties.a.length !== properties.b.length) throw new Error("Vectors not the same dimension.");", + " switch (properties.operator) {", + " case OPERATORS.ADD:", + " nodeState.putShared("c", add(properties.a, properties.b));", + " break;", + " case OPERATORS.SUBTRACT:", + " nodeState.putShared("c", subtract(properties.a, properties.b));", + " break;", + " case OPERATORS.DOT:", + " nodeState.putShared("c", dot(properties.a, properties.b));", + " break;", + " case OPERATORS.CROSS:", + " if (properties.a.length !== 3) throw new Error("Vectors not dimension 3 for cross product");", + " nodeState.putShared("c", cross(properties.a, properties.b));", + " break;", + " default: throw new Error("Unknown operator.");", + " }", + " action.goTo(SCRIPT_OUTCOMES.SUCCESS);", + "}", + "", + "main();", + "", + ], + "serviceName": "c15e2efb3deb4d4ea338c74a6440b69f", + "tags": [ + "math", + "vector", + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export -Nxi c605506774a848f7877b4d17a453bd39 -D customNodeExportDir1": should export custom node with service name "c605506774a848f7877b4d17a453bd39" to directory customNodeExportDir1 with no metadata and extracted script 1`] = `0`; + +exports[`frodo node export "frodo node export -Nxi c605506774a848f7877b4d17a453bd39 -D customNodeExportDir1": should export custom node with service name "c605506774a848f7877b4d17a453bd39" to directory customNodeExportDir1 with no metadata and extracted script 2`] = `""`; + +exports[`frodo node export "frodo node export -Nxi c605506774a848f7877b4d17a453bd39 -D customNodeExportDir1": should export custom node with service name "c605506774a848f7877b4d17a453bd39" to directory customNodeExportDir1 with no metadata and extracted script: customNodeExportDir1/c605506774a848f7877b4d17a453bd39.nodeTypes.json 1`] = ` +{ + "nodeTypes": { + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": {}, + "script": "file://c605506774a848f7877b4d17a453bd39.nodeTypes.js", + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export -a": should export all custom nodes to a single file 1`] = `0`; + +exports[`frodo node export "frodo node export -a": should export all custom nodes to a single file 2`] = `""`; + +exports[`frodo node export "frodo node export -a": should export all custom nodes to a single file: allCustomNodes.nodeTypes.json 1`] = ` +{ + "meta": Any, + "nodeTypes": { + "8ab9f1aad4b4460a9c45d15fb148e221-1": { + "_id": "8ab9f1aad4b4460a9c45d15fb148e221-1", + "description": "Debug node that displays the shared and transient state of the journey for debugging purposes.", + "displayName": "Display State", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome", + ], + "outputs": [], + "properties": { + "displayFormat": { + "defaultValue": "TABLE", + "description": "The format in which to display the states.", + "multivalued": false, + "options": { + "JSON": "Raw JSON", + "TABLE": "HTML Table", + }, + "required": true, + "title": "Display Format", + "type": "STRING", + }, + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " OUTCOME: "outcome"", + "};", + "", + "function main() {", + " if (!callbacks.isEmpty()) {", + " action.goTo(SCRIPT_OUTCOMES.OUTCOME);", + " return;", + " }", + " var keySet = nodeState.keys(); // Java Set", + " var keys = Array.from(keySet); // Make it into JavaScript array", + " debugState = {};", + " for (var i in keys) {", + " var k = new String(keys[i]);", + " var item = nodeState.get(k);", + " if (typeof item === "object") {", + " debugState[k] = nodeState.getObject(k);", + " } else {", + " debugState[k] = nodeState.get(k);", + " }", + " }", + " if (properties.displayFormat === "JSON") {", + " callbacksBuilder.textOutputCallback(0, \`
\${JSON.stringify(debugState, null, 2)}
\`);", + " return;", + " }", + " callbacksBuilder.textOutputCallback(0, \`\${Array.from(Object.keys(debugState).map(k => \`\`))}
KeyValue
\${k}
\${debugState[k]}
\`);", + "}", + "", + "main();", + "", + ], + "serviceName": "8ab9f1aad4b4460a9c45d15fb148e221", + "tags": [ + "debug", + "testing", + ], + }, + "c15e2efb3deb4d4ea338c74a6440b69f-1": { + "_id": "c15e2efb3deb4d4ea338c74a6440b69f-1", + "description": "Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key "c".", + "displayName": "Vector ALU", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "Success", + ], + "outputs": [ + "c", + ], + "properties": { + "a": { + "defaultValue": [ + 1, + 2, + 3, + ], + "description": "Left vector operand", + "multivalued": true, + "required": true, + "title": "A", + "type": "NUMBER", + }, + "b": { + "defaultValue": [ + 4, + 5, + 6, + ], + "description": "Right vector operand", + "multivalued": true, + "required": true, + "title": "B", + "type": "NUMBER", + }, + "operator": { + "defaultValue": "DOT", + "description": "The binary operation to perform on the vectors.", + "multivalued": false, + "options": { + "ADD": "+", + "CROSS": "X", + "DOT": ".", + "SUBTRACT": "-", + }, + "required": true, + "title": "Operator", + "type": "STRING", + }, + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " SUCCESS: 'Success'", + "};", + "", + "var OPERATORS = {", + " ADD: "ADD",", + " SUBTRACT: "SUBTRACT",", + " DOT: "DOT",", + " CROSS: "CROSS"", + "}", + "", + "function add(a, b) {", + " return a.map((v, i) => v + b[i]);", + "}", + "", + "function subtract(a, b) {", + " return a.map((v, i) => v - b[i]);", + "}", + "", + "function dot(a, b) {", + " return a.reduce((sum, v, i) => sum + v * b[i], 0);", + "}", + "", + "function cross(a, b) {", + " return [", + " a[1] * b[2] - a[2] * b[1],", + " a[2] * b[0] - a[0] * b[2],", + " a[0] * b[1] - a[1] * b[0]", + " ];", + "}", + "", + "function main() {", + " if (properties.a.length !== properties.b.length) throw new Error("Vectors not the same dimension.");", + " switch (properties.operator) {", + " case OPERATORS.ADD:", + " nodeState.putShared("c", add(properties.a, properties.b));", + " break;", + " case OPERATORS.SUBTRACT:", + " nodeState.putShared("c", subtract(properties.a, properties.b));", + " break;", + " case OPERATORS.DOT:", + " nodeState.putShared("c", dot(properties.a, properties.b));", + " break;", + " case OPERATORS.CROSS:", + " if (properties.a.length !== 3) throw new Error("Vectors not dimension 3 for cross product");", + " nodeState.putShared("c", cross(properties.a, properties.b));", + " break;", + " default: throw new Error("Unknown operator.");", + " }", + " action.goTo(SCRIPT_OUTCOMES.SUCCESS);", + "}", + "", + "main();", + "", + ], + "serviceName": "c15e2efb3deb4d4ea338c74a6440b69f", + "tags": [ + "math", + "vector", + "utilities", + ], + }, + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": {}, + "script": [ + "var SCRIPT_OUTCOMES = {", + " TRUE: 'True',", + " FALSE: 'False'", + "}", + "", + "function main() {", + " action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);", + "}", + "", + "main();", + "", + ], + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities", + ], + }, + "c6063fb2f5dc42dd9772bedc93898bd8-1": { + "_id": "c6063fb2f5dc42dd9772bedc93898bd8-1", + "description": "Simple ALU that performs basic binary math operations. Expects an "x" and "y" value on the shared state, and will produce a new "z" value on the shared state as output.", + "displayName": "ALU", + "errorOutcome": true, + "inputs": [ + "x", + "y", + ], + "outcomes": [ + "Success", + ], + "outputs": [ + "z", + ], + "properties": { + "operator": { + "defaultValue": "ADD", + "description": "The operation to perform.", + "multivalued": false, + "options": { + "ADD": "+", + "DIVIDE": "/", + "MULTIPLY": "*", + "SUBTRACT": "-", + }, + "required": true, + "title": "Operator", + "type": "STRING", + }, + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " SUCCESS: 'Success'", + "};", + "", + "var OPERATORS = {", + " ADD: "ADD",", + " SUBTRACT: "SUBTRACT",", + " MULTIPLY: "MULTIPLY",", + " DIVIDE: "DIVIDE"", + "}", + "", + "function main() {", + " var a = Number(properties.a);", + " var b = Number(properties.b);", + " switch (properties.operator) {", + " case OPERATORS.ADD:", + " nodeState.putShared("z", a + b);", + " break;", + " case OPERATORS.SUBTRACT:", + " nodeState.putShared("z", a - b);", + " break;", + " case OPERATORS.MULTIPLY:", + " nodeState.putShared("z", a * b);", + " break;", + " case OPERATORS.DIVIDE:", + " if (b == 0) throw new Error("Cannot divide by 0");", + " nodeState.putShared("z", a / b);", + " break;", + " default: throw new Error("Unknown operator.");", + " }", + " action.goTo(SCRIPT_OUTCOMES.SUCCESS);", + "}", + "", + "main();", + "", + ], + "serviceName": "c6063fb2f5dc42dd9772bedc93898bd8", + "tags": [ + "math", + "utilities", + ], + }, + "e5ad0110c8ee4dafaae983003cd05d4a-1": { + "_id": "e5ad0110c8ee4dafaae983003cd05d4a-1", + "description": "Generate a signed JWT using the HMAC SHA-256 algorithm.", + "displayName": "Generate JWT", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": { + "audience": { + "description": "The audience (aud) claim", + "multivalued": false, + "required": true, + "title": "Audience", + "type": "STRING", + }, + "issuer": { + "description": "The issuer (iss) claim", + "multivalued": false, + "required": true, + "title": "Issuer", + "type": "STRING", + }, + "signingkey": { + "defaultValue": "esv.signing.key", + "description": "The secret label for the HMAC signing key", + "multivalued": false, + "required": true, + "title": "HMAC Signing Key", + "type": "STRING", + }, + "validity": { + "defaultValue": 5, + "description": "", + "multivalued": false, + "required": true, + "title": "Validity (minutes)", + "type": "NUMBER", + }, + }, + "script": [ + "var aud = properties.audience;", + "var iss = properties.issuer;", + "var validity = properties.validity;", + "var esv = properties.signingkey;", + "", + "var signingkey = systemEnv.getProperty(esv);", + "", + "var username = nodeState.get("username");", + "", + "var data = {", + " jwtType:"SIGNED",", + " jwsAlgorithm: "HS256",", + " issuer: iss,", + " subject: username,", + " audience: aud,", + " type: "JWT",", + " validityMinutes: validity,", + " signingKey: signingkey", + "};", + "", + "var jwt = jwtAssertion.generateJwt(data);", + "", + "if (jwt !== null && jwt.length > 0) {", + " nodeState.putShared("assertionJwt" , jwt);", + " action.goTo("True");", + "} else {", + " action.goTo("False");", + "}", + ], + "serviceName": "e5ad0110c8ee4dafaae983003cd05d4a", + "tags": [ + "Utilities", + "utilities", + ], + }, + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome", + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback", + }, + "required": true, + "title": "Callback", + "type": "STRING", + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING", + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING", + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). + +For example, for textOutputCallback, the options could be: { messageType: 0, message: "Hello World!" }. + +Note that for required parameters that are not specified in the options will use default values based on the type of the parameter ("" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT", + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING", + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING", + }, + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " OUTCOME: 'outcome'", + "};", + "", + "var CALLBACKS = {", + " BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK",", + " CHOICE_CALLBACK: "CHOICE_CALLBACK",", + " CONFIRMATION_CALLBACK: "CONFIRMATION_CALLBACK",", + " CONSENT_MAPPING_CALLBACK: "CONSENT_MAPPING_CALLBACK",", + " DEVICE_PROFILE_CALLBACK: "DEVICE_PROFILE_CALLBACK",", + " HIDDEN_VALUE_CALLBACK: "HIDDEN_VALUE_CALLBACK",", + " HTTP_CALLBACK: "HTTP_CALLBACK",", + " IDP_CALLBACK: "IDP_CALLBACK",", + " KBA_CREATE_CALLBACK: "KBA_CREATE_CALLBACK",", + " LANGUAGE_CALLBACK: "LANGUAGE_CALLBACK",", + " METADATA_CALLBACK: "METADATA_CALLBACK",", + " NAME_CALLBACK: "NAME_CALLBACK",", + " NUMBER_ATTRIBUTE_INPUT_CALLBACK: "NUMBER_ATTRIBUTE_INPUT_CALLBACK",", + " PASSWORD_CALLBACK: "PASSWORD_CALLBACK",", + " POLLING_WAIT_CALLBACK: "POLLING_WAIT_CALLBACK",", + " REDIRECT_CALLBACK: "REDIRECT_CALLBACK",", + " SCRIPT_TEXT_OUTPUT_CALLBACK: "SCRIPT_TEXT_OUTPUT_CALLBACK",", + " SELECT_IDP_CALLBACK: "SELECT_IDP_CALLBACK",", + " STRING_ATTRIBUTE_INPUT_CALLBACK: "STRING_ATTRIBUTE_INPUT_CALLBACK",", + " SUSPENDED_TEXT_OUTPUT_CALLBACK: "SUSPENDED_TEXT_OUTPUT_CALLBACK",", + " TERMS_AND_CONDITIONS_CALLBACK: "TERMS_AND_CONDITIONS_CALLBACK",", + " TEXT_INPUT_CALLBACK: "TEXT_INPUT_CALLBACK",", + " TEXT_OUTPUT_CALLBACK: "TEXT_OUTPUT_CALLBACK",", + " VALIDATED_PASSWORD_CALLBACK: "VALIDATED_PASSWORD_CALLBACK",", + " VALIDATED_USERNAME_CALLBACK: "VALIDATED_USERNAME_CALLBACK",", + " X509_CERTIFICATE_CALLBACK: "X509_CERTIFICATE_CALLBACK"", + "}", + "", + "function isStringPresent(value) {", + " return value;", + "}", + "", + "function getString(value) {", + " return value || '';", + "}", + "", + "function isArrayPresent(value) {", + " return value;", + "}", + "", + "function getArray(value) {", + " return value ? JSON.parse(value) : [];", + "}", + "", + "function isObjectPresent(value) {", + " return value;", + "}", + "", + "function getObject(value) {", + " return value ? JSON.parse(value) : {};", + "}", + "", + "function isIntPresent(value) {", + " return value;", + "}", + "", + "function getInt(value) {", + " return value ? parseInt(value) : 0;", + "}", + "", + "function isDoublePresent(value) {", + " return value;", + "}", + "", + "function getDouble(value) {", + " return value ? parseFloat(value) : 0.0;", + "}", + "", + "function isBooleanPresent(value) {", + " return value;", + "}", + "", + "function getBoolean(value) {", + " return value ? value.toLowerCase() === 'true' : false;", + "}", + "", + "function setProperty(value) {", + " if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);", + " if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);", + " if (properties.objectSharedProperty) {", + " var attributes = {};", + " attributes[properties.objectSharedProperty] = value;", + " nodeState.mergeShared({", + " objectAttributes: attributes", + " });", + " }", + " if (properties.objectTransientProperty) {", + " var attributes = {};", + " attributes[properties.objectTransientProperty] = value;", + " nodeState.mergeTransient({", + " objectAttributes: attributes", + " });", + " }", + "}", + "", + "function booleanAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getBoolean(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function choiceCallback() {", + " var prompt = getString(properties.options.prompt);", + " var choices = getArray(properties.options.choices);", + " var defaultChoice = getInt(properties.options.defaultChoice);", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);", + "}", + "", + "function confirmationCallback() {", + " var prompt = getString(properties.options.prompt);", + " var messageType = getInt(properties.options.messageType);", + " var options = getArray(properties.options.options);", + " var optionType = getInt(properties.options.optionType);", + " var defaultOption = getInt(properties.options.defaultOption);", + " if (isStringPresent(properties.options.prompt)) {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);", + " }", + " } else {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(messageType, options, defaultOption);", + " }", + " }", + "}", + "", + "function consentMappingCallback() {", + " var config = getObject(properties.options.config);", + " var message = getString(properties.options.message);", + " var isRequired = getBoolean(properties.options.isRequired);", + " var name = getString(properties.options.name);", + " var displayName = getString(properties.options.displayName);", + " var icon = getString(properties.options.icon);", + " var accessLevel = getString(properties.options.accessLevel);", + " var titles = getArray(properties.options.titles);", + " if (isObjectPresent(properties.options.prompt)) {", + " callbacksBuilder.consentMappingCallback(config, message, isRequired);", + " } else {", + " callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);", + " }", + "}", + "", + "function deviceProfileCallback() {", + " var metadata = getBoolean(properties.options.metadata);", + " var location = getBoolean(properties.options.location);", + " var message = getString(properties.options.message);", + " callbacksBuilder.deviceProfileCallback(metadata, location, message);", + "}", + "", + "function hiddenValueCallback() {", + " var id = getString(properties.options.id);", + " var value = getString(properties.options.value);", + " callbacksBuilder.hiddenValueCallback(id, value);", + "}", + "", + "function httpCallback() {", + " var authorizationHeader = getString(properties.options.authorizationHeader);", + " var negotiationHeader = getString(properties.options.negotiationHeader);", + " var authRHeader = getString(properties.options.authRHeader);", + " var negoName = getString(properties.options.negoName);", + " var negoValue = getString(properties.options.negoValue);", + " if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {", + " var errorCode = getString(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);", + " } else {", + " var errorCode = getInt(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);", + " }", + "}", + "", + "function idPCallback() {", + " var provider = getString(properties.options.provider);", + " var clientId = getString(properties.options.clientId);", + " var redirectUri = getString(properties.options.redirectUri);", + " var scope = getArray(properties.options.scope);", + " var nonce = getString(properties.options.nonce);", + " var request = getString(properties.options.request);", + " var requestUri = getString(properties.options.requestUri);", + " var acrValues = getArray(properties.options.acrValues);", + " var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);", + " var token = getString(properties.options.token);", + " var tokenType = getString(properties.options.tokenType);", + " if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);", + " } else {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);", + " }", + "}", + "", + "function kbaCreateCallback() {", + " var prompt = getString(properties.options.prompt);", + " var predefinedQuestions = getArray(properties.options.predefinedQuestions);", + " var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);", + " callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);", + "}", + "", + "function languageCallback() {", + " var language = getString(properties.options.language);", + " var country = getString(properties.options.country);", + " callbacksBuilder.languageCallback(language, country);", + "}", + "", + "function metadataCallback() {", + " var outputValue = getObject(properties.options.outputValue);", + " callbacksBuilder.metadataCallback(outputValue);", + "}", + "", + "function nameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultName = getString(properties.options.defaultName);", + " if (isStringPresent(properties.options.defaultName)) {", + " callbacksBuilder.nameCallback(prompt, defaultName);", + " } else {", + " callbacksBuilder.nameCallback(prompt);", + " }", + "}", + "", + "function numberAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getDouble(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function passwordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " callbacksBuilder.passwordCallback(prompt, echoOn);", + "}", + "", + "function pollingWaitCallback() {", + " var waitTime = getString(properties.options.waitTime);", + " var message = getString(properties.options.message);", + " callbacksBuilder.pollingWaitCallback(waitTime, message);", + "}", + "", + "function redirectCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function scriptTextOutputCallback() {", + " var message = getString(properties.options.message);", + " callbacksBuilder.scriptTextOutputCallback(message);", + "}", + "", + "function selectIdPCallback() {", + " var providers = getObject(properties.options.providers);", + " callbacksBuilder.selectIdPCallback(providers);", + "}", + "", + "function stringAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getString(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function suspendedTextOutputCallback() {", + " var messageType = getInt(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.suspendedTextOutputCallback(messageType, message);", + "}", + "", + "function termsAndConditionsCallback() {", + " var version = getString(properties.options.version);", + " var terms = getString(properties.options.terms);", + " var createDate = getString(properties.options.createDate);", + " callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);", + "}", + "", + "function textInputCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultText = getString(properties.options.defaultText);", + " if (isStringPresent(properties.options.defaultText)) {", + " callbacksBuilder.textInputCallback(prompt, defaultText);", + " } else {", + " callbacksBuilder.textInputCallback(prompt);", + " }", + "}", + "", + "function textOutputCallback() {", + " var messageType = getString(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.textOutputCallback(messageType, message);", + "}", + "", + "function validatedPasswordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);", + " }", + "}", + "", + "function validatedUsernameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);", + " }", + "}", + "", + "function x509CertificateCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function getBooleanAttributeInputCallback() {", + " setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));", + "}", + "", + "function getChoiceCallback() {", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " var selections = callbacks.getChoiceCallbacks().get(0);", + " setProperty(multipleSelectionsAllowed ? selections : selections[0]);", + "}", + "", + "function getConfirmationCallback() {", + " setProperty(callbacks.getConfirmationCallbacks().get(0));", + "}", + "", + "function getConsentMappingCallback() {", + " setProperty(callbacks.getConsentMappingCallbacks().get(0));", + "}", + "", + "function getDeviceProfileCallback() {", + " setProperty(callbacks.getDeviceProfileCallbacks().get(0));", + "}", + "", + "function getHiddenValueCallback() {", + " var id = getString(properties.options.id);", + " setProperty(callbacks.getHiddenValueCallbacks().get(id));", + "}", + "", + "function getHttpCallback() {", + " setProperty(callbacks.getHttpCallbacks().get(0));", + "}", + "", + "function getIdPCallback() {", + " setProperty(callbacks.getIdpCallbacks().get(0));", + "}", + "", + "function getKbaCreateCallback() {", + " setProperty(callbacks.getKbaCreateCallbacks().get(0));", + "}", + "", + "function getLanguageCallback() {", + " setProperty(callbacks.getLanguageCallbacks().get(0));", + "}", + "", + "function getNameCallback() {", + " setProperty(callbacks.getNameCallbacks().get(0));", + "}", + "", + "function getNumberAttributeInputCallback() {", + " setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));", + "}", + "", + "function getPasswordCallback() {", + " setProperty(callbacks.getPasswordCallbacks().get(0));", + "}", + "", + "function getSelectIdPCallback() {", + " setProperty(callbacks.getSelectIdPCallbacks().get(0));", + "}", + "", + "function getStringAttributeInputCallback() {", + " setProperty(callbacks.getStringAttributeInputCallbacks().get(0));", + "}", + "", + "function getTermsAndConditionsCallback() {", + " setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));", + "}", + "", + "function getTextInputCallback() {", + " setProperty(callbacks.getTextInputCallbacks().get(0));", + "}", + "", + "function getValidatedPasswordCallback() {", + " setProperty(callbacks.getValidatedPasswordCallbacks().get(0));", + "}", + "", + "function getValidatedUsernameCallback() {", + " setProperty(callbacks.getValidatedUsernameCallbacks().get(0));", + "}", + "", + "function getX509CertificateCallback() {", + " setProperty(callbacks.getX509CertificateCallbacks().get(0));", + "}", + "", + "function main() {", + " if (!callbacks.isEmpty()) {", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;", + " default: break;", + " }", + " action.goTo(SCRIPT_OUTCOMES.OUTCOME);", + " return;", + " }", + "", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: idPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;", + " case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: nameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;", + " case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;", + " case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;", + " case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;", + " case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;", + " case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;", + " default: throw new Error('Unknown Callback'); // Should never reach this case", + " }", + "}", + "", + "main();", + "", + ], + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities", + ], + }, + "session-1": { + "_id": "session-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session AM", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False", + ], + "outputs": [], + "properties": {}, + "script": [ + "var SCRIPT_OUTCOMES = {", + " TRUE: 'True',", + " FALSE: 'False'", + "}", + "", + "function main() {", + " action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);", + "}", + "", + "main();", + "", + ], + "serviceName": "session", + "tags": [ + "utilities", + ], + }, + }, +} +`; + +exports[`frodo node export "frodo node export -xn 'Display Callback' -D customNodeExportDir2": should export the custom node with display name "Display Callback" to the directory customNodeExportDir2 with extracted script 1`] = `0`; + +exports[`frodo node export "frodo node export -xn 'Display Callback' -D customNodeExportDir2": should export the custom node with display name "Display Callback" to the directory customNodeExportDir2 with extracted script 2`] = `""`; + +exports[`frodo node export "frodo node export -xn 'Display Callback' -D customNodeExportDir2": should export the custom node with display name "Display Callback" to the directory customNodeExportDir2 with extracted script: customNodeExportDir2/Display-Callback.nodeTypes.json 1`] = ` +{ + "meta": Any, + "nodeTypes": { + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome", + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback", + }, + "required": true, + "title": "Callback", + "type": "STRING", + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING", + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING", + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). + +For example, for textOutputCallback, the options could be: { messageType: 0, message: "Hello World!" }. + +Note that for required parameters that are not specified in the options will use default values based on the type of the parameter ("" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT", + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING", + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING", + }, + }, + "script": "file://Display-Callback.nodeTypes.js", + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities", + ], + }, + }, +} +`; diff --git a/test/e2e/__snapshots__/node-import.e2e.test.js.snap b/test/e2e/__snapshots__/node-import.e2e.test.js.snap new file mode 100644 index 000000000..698463c95 --- /dev/null +++ b/test/e2e/__snapshots__/node-import.e2e.test.js.snap @@ -0,0 +1,19 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`frodo node import "frodo node import --all --file test/e2e/exports/all/allCustomNodes.nodeTypes.json": should import all custom nodes from the file "test/e2e/exports/all/allCustomNodes.nodeTypes.json" 1`] = `""`; + +exports[`frodo node import "frodo node import --all-separate --directory test/e2e/exports/all-separate/cloud/global/nodeTypes": should import all custom nodes from the test/e2e/exports/all-separate/cloud/global/nodeTypes directory" 1`] = `""`; + +exports[`frodo node import "frodo node import --node-id c605506774a848f7877b4d17a453bd39-1 --file allCustomNodes.nodeTypes.json --directory test/e2e/exports/all": should import the custom node with the id "c605506774a848f7877b4d17a453bd39-1" from the file "test/e2e/exports/all/allCustomNodes.nodeTypes.json" 1`] = `""`; + +exports[`frodo node import "frodo node import --node-name 'Display Callback' --file test/e2e/exports/all/allCustomNodes.nodeTypes.json": should import the custom node named "Display Callback" from the file "test/e2e/exports/all/allCustomNodes.nodeTypes.json" 1`] = `""`; + +exports[`frodo node import "frodo node import -AD test/e2e/exports/all-separate/cloud/global/nodeTypes": should import all custom nodes from the test/e2e/exports/all-separate/cloud/global/nodeTypes directory" 1`] = `""`; + +exports[`frodo node import "frodo node import -af allCustomNodes.nodeTypes.json -D test/e2e/exports/all": should import all custom nodes from the file "test/e2e/exports/all/allCustomNodes.nodeTypes.json" 1`] = `""`; + +exports[`frodo node import "frodo node import -f test/e2e/exports/all/allCustomNodes.nodeTypes.json": should import the first custom node from the file "test/e2e/exports/all/allCustomNodes.nodeTypes.json" 1`] = `""`; + +exports[`frodo node import "frodo node import -i c605506774a848f7877b4d17a453bd39 -f test/e2e/exports/all/allCustomNodes.nodeTypes.json": should import the custom node with the service name "c605506774a848f7877b4d17a453bd39" from the file "test/e2e/exports/all/allCustomNodes.nodeTypes.json" 1`] = `""`; + +exports[`frodo node import "frodo node import -n 'Display Callback' -f allCustomNodes.nodeTypes.json -D test/e2e/exports/all": should import the custom node named "Display Callback" from the file test/e2e/exports/all/allCustomNodes.nodeTypes.json 1`] = `""`; diff --git a/test/e2e/__snapshots__/node-list.e2e.test.js.snap b/test/e2e/__snapshots__/node-list.e2e.test.js.snap new file mode 100644 index 000000000..ada52c0d1 --- /dev/null +++ b/test/e2e/__snapshots__/node-list.e2e.test.js.snap @@ -0,0 +1,66 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`frodo node list "frodo node list --long": should list the ids, names, descriptions, and usages of the custom nodes. 1`] = ` +"Display Name │Id (-1) │Journeys│Instances│Error Outcome│Description +Display Callback│ef81b1a52c914710b3388caebfe7233a-1│1 │9 │disabled │Displays custom callback to + │ │ │ │ │the page +Generate JWT │e5ad0110c8ee4dafaae983003cd05d4a-1│0 │0 │enabled │Generate a signed JWT using + │ │ │ │ │the HMAC SHA-256 algorithm. +Has Session AM │session-1 │1 │1 │disabled │Checks if the user has a + │ │ │ │ │current session. +Display State │8ab9f1aad4b4460a9c45d15fb148e221-1│2 │2 │disabled │Debug node that displays the + │ │ │ │ │shared and transient state of + │ │ │ │ │the journey for debugging + │ │ │ │ │purposes. +Vector ALU │c15e2efb3deb4d4ea338c74a6440b69f-1│2 │2 │enabled │Simple ALU that performs basic + │ │ │ │ │binary vector math operations. + │ │ │ │ │Outputs the result onto the + │ │ │ │ │shared state with key "c". +Has Session │c605506774a848f7877b4d17a453bd39-1│2 │4 │disabled │Checks if the user has a + │ │ │ │ │current session. +ALU │c6063fb2f5dc42dd9772bedc93898bd8-1│2 │2 │enabled │Simple ALU that performs basic + │ │ │ │ │binary math operations. + │ │ │ │ │Expects an "x" and "y" value + │ │ │ │ │on the shared state, and will + │ │ │ │ │produce a new "z" value on the + │ │ │ │ │shared state as output. +" +`; + +exports[`frodo node list "frodo node list -l": should list the ids, names, descriptions, and usages of the custom nodes. 1`] = ` +"Display Name │Id (-1) │Journeys│Instances│Error Outcome│Description +Display Callback│ef81b1a52c914710b3388caebfe7233a-1│1 │9 │disabled │Displays custom callback to + │ │ │ │ │the page +Generate JWT │e5ad0110c8ee4dafaae983003cd05d4a-1│0 │0 │enabled │Generate a signed JWT using + │ │ │ │ │the HMAC SHA-256 algorithm. +Has Session AM │session-1 │1 │1 │disabled │Checks if the user has a + │ │ │ │ │current session. +Display State │8ab9f1aad4b4460a9c45d15fb148e221-1│2 │2 │disabled │Debug node that displays the + │ │ │ │ │shared and transient state of + │ │ │ │ │the journey for debugging + │ │ │ │ │purposes. +Vector ALU │c15e2efb3deb4d4ea338c74a6440b69f-1│2 │2 │enabled │Simple ALU that performs basic + │ │ │ │ │binary vector math operations. + │ │ │ │ │Outputs the result onto the + │ │ │ │ │shared state with key "c". +Has Session │c605506774a848f7877b4d17a453bd39-1│2 │4 │disabled │Checks if the user has a + │ │ │ │ │current session. +ALU │c6063fb2f5dc42dd9772bedc93898bd8-1│2 │2 │enabled │Simple ALU that performs basic + │ │ │ │ │binary math operations. + │ │ │ │ │Expects an "x" and "y" value + │ │ │ │ │on the shared state, and will + │ │ │ │ │produce a new "z" value on the + │ │ │ │ │shared state as output. +" +`; + +exports[`frodo node list "frodo node list": should list the names of the custom nodes 1`] = ` +"Display Callback +Generate JWT +Has Session AM +Display State +Vector ALU +Has Session +ALU +" +`; diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/ALU.nodeTypes.js b/test/e2e/exports/all-separate/classic/global/nodeTypes/ALU.nodeTypes.js new file mode 100644 index 000000000..14635619f --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/ALU.nodeTypes.js @@ -0,0 +1,34 @@ +var SCRIPT_OUTCOMES = { + SUCCESS: 'Success' +}; + +var OPERATORS = { + ADD: "ADD", + SUBTRACT: "SUBTRACT", + MULTIPLY: "MULTIPLY", + DIVIDE: "DIVIDE" +} + +function main() { + var a = Number(properties.a); + var b = Number(properties.b); + switch (properties.operator) { + case OPERATORS.ADD: + nodeState.putShared("z", a + b); + break; + case OPERATORS.SUBTRACT: + nodeState.putShared("z", a - b); + break; + case OPERATORS.MULTIPLY: + nodeState.putShared("z", a * b); + break; + case OPERATORS.DIVIDE: + if (b == 0) throw new Error("Cannot divide by 0"); + nodeState.putShared("z", a / b); + break; + default: throw new Error("Unknown operator."); + } + action.goTo(SCRIPT_OUTCOMES.SUCCESS); +} + +main(); diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/ALU.nodeTypes.json b/test/e2e/exports/all-separate/classic/global/nodeTypes/ALU.nodeTypes.json new file mode 100644 index 000000000..e5239980e --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/ALU.nodeTypes.json @@ -0,0 +1,42 @@ +{ + "nodeTypes": { + "c6063fb2f5dc42dd9772bedc93898bd8-1": { + "_id": "c6063fb2f5dc42dd9772bedc93898bd8-1", + "description": "Simple ALU that performs basic binary math operations. Expects an \"x\" and \"y\" value on the shared state, and will produce a new \"z\" value on the shared state as output.", + "displayName": "ALU", + "errorOutcome": true, + "inputs": [ + "x", + "y" + ], + "outcomes": [ + "Success" + ], + "outputs": [ + "z" + ], + "properties": { + "operator": { + "defaultValue": "ADD", + "description": "The operation to perform.", + "multivalued": false, + "options": { + "ADD": "+", + "DIVIDE": "/", + "MULTIPLY": "*", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": "file://ALU.nodeTypes.js", + "serviceName": "c6063fb2f5dc42dd9772bedc93898bd8", + "tags": [ + "math", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/Display-Callback.nodeTypes.js b/test/e2e/exports/all-separate/classic/global/nodeTypes/Display-Callback.nodeTypes.js new file mode 100644 index 000000000..6b682c6c1 --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/Display-Callback.nodeTypes.js @@ -0,0 +1,511 @@ +var SCRIPT_OUTCOMES = { + OUTCOME: 'outcome' +}; + +var CALLBACKS = { + BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK", + CHOICE_CALLBACK: "CHOICE_CALLBACK", + CONFIRMATION_CALLBACK: "CONFIRMATION_CALLBACK", + CONSENT_MAPPING_CALLBACK: "CONSENT_MAPPING_CALLBACK", + DEVICE_PROFILE_CALLBACK: "DEVICE_PROFILE_CALLBACK", + HIDDEN_VALUE_CALLBACK: "HIDDEN_VALUE_CALLBACK", + HTTP_CALLBACK: "HTTP_CALLBACK", + IDP_CALLBACK: "IDP_CALLBACK", + KBA_CREATE_CALLBACK: "KBA_CREATE_CALLBACK", + LANGUAGE_CALLBACK: "LANGUAGE_CALLBACK", + METADATA_CALLBACK: "METADATA_CALLBACK", + NAME_CALLBACK: "NAME_CALLBACK", + NUMBER_ATTRIBUTE_INPUT_CALLBACK: "NUMBER_ATTRIBUTE_INPUT_CALLBACK", + PASSWORD_CALLBACK: "PASSWORD_CALLBACK", + POLLING_WAIT_CALLBACK: "POLLING_WAIT_CALLBACK", + REDIRECT_CALLBACK: "REDIRECT_CALLBACK", + SCRIPT_TEXT_OUTPUT_CALLBACK: "SCRIPT_TEXT_OUTPUT_CALLBACK", + SELECT_IDP_CALLBACK: "SELECT_IDP_CALLBACK", + STRING_ATTRIBUTE_INPUT_CALLBACK: "STRING_ATTRIBUTE_INPUT_CALLBACK", + SUSPENDED_TEXT_OUTPUT_CALLBACK: "SUSPENDED_TEXT_OUTPUT_CALLBACK", + TERMS_AND_CONDITIONS_CALLBACK: "TERMS_AND_CONDITIONS_CALLBACK", + TEXT_INPUT_CALLBACK: "TEXT_INPUT_CALLBACK", + TEXT_OUTPUT_CALLBACK: "TEXT_OUTPUT_CALLBACK", + VALIDATED_PASSWORD_CALLBACK: "VALIDATED_PASSWORD_CALLBACK", + VALIDATED_USERNAME_CALLBACK: "VALIDATED_USERNAME_CALLBACK", + X509_CERTIFICATE_CALLBACK: "X509_CERTIFICATE_CALLBACK" +} + +function isStringPresent(value) { + return value; +} + +function getString(value) { + return value || ''; +} + +function isArrayPresent(value) { + return value; +} + +function getArray(value) { + return value ? JSON.parse(value) : []; +} + +function isObjectPresent(value) { + return value; +} + +function getObject(value) { + return value ? JSON.parse(value) : {}; +} + +function isIntPresent(value) { + return value; +} + +function getInt(value) { + return value ? parseInt(value) : 0; +} + +function isDoublePresent(value) { + return value; +} + +function getDouble(value) { + return value ? parseFloat(value) : 0.0; +} + +function isBooleanPresent(value) { + return value; +} + +function getBoolean(value) { + return value ? value.toLowerCase() === 'true' : false; +} + +function setProperty(value) { + if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value); + if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value); + if (properties.objectSharedProperty) { + var attributes = {}; + attributes[properties.objectSharedProperty] = value; + nodeState.mergeShared({ + objectAttributes: attributes + }); + } + if (properties.objectTransientProperty) { + var attributes = {}; + attributes[properties.objectTransientProperty] = value; + nodeState.mergeTransient({ + objectAttributes: attributes + }); + } +} + +function booleanAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getBoolean(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required); + } +} + +function choiceCallback() { + var prompt = getString(properties.options.prompt); + var choices = getArray(properties.options.choices); + var defaultChoice = getInt(properties.options.defaultChoice); + var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed); + callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed); +} + +function confirmationCallback() { + var prompt = getString(properties.options.prompt); + var messageType = getInt(properties.options.messageType); + var options = getArray(properties.options.options); + var optionType = getInt(properties.options.optionType); + var defaultOption = getInt(properties.options.defaultOption); + if (isStringPresent(properties.options.prompt)) { + if (isIntPresent(properties.options.optionType)) { + callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption); + } else { + callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption); + } + } else { + if (isIntPresent(properties.options.optionType)) { + callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption); + } else { + callbacksBuilder.confirmationCallback(messageType, options, defaultOption); + } + } +} + +function consentMappingCallback() { + var config = getObject(properties.options.config); + var message = getString(properties.options.message); + var isRequired = getBoolean(properties.options.isRequired); + var name = getString(properties.options.name); + var displayName = getString(properties.options.displayName); + var icon = getString(properties.options.icon); + var accessLevel = getString(properties.options.accessLevel); + var titles = getArray(properties.options.titles); + if (isObjectPresent(properties.options.prompt)) { + callbacksBuilder.consentMappingCallback(config, message, isRequired); + } else { + callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired); + } +} + +function deviceProfileCallback() { + var metadata = getBoolean(properties.options.metadata); + var location = getBoolean(properties.options.location); + var message = getString(properties.options.message); + callbacksBuilder.deviceProfileCallback(metadata, location, message); +} + +function hiddenValueCallback() { + var id = getString(properties.options.id); + var value = getString(properties.options.value); + callbacksBuilder.hiddenValueCallback(id, value); +} + +function httpCallback() { + var authorizationHeader = getString(properties.options.authorizationHeader); + var negotiationHeader = getString(properties.options.negotiationHeader); + var authRHeader = getString(properties.options.authRHeader); + var negoName = getString(properties.options.negoName); + var negoValue = getString(properties.options.negoValue); + if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) { + var errorCode = getString(properties.options.errorCode); + callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode); + } else { + var errorCode = getInt(properties.options.errorCode); + callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode); + } +} + +function idPCallback() { + var provider = getString(properties.options.provider); + var clientId = getString(properties.options.clientId); + var redirectUri = getString(properties.options.redirectUri); + var scope = getArray(properties.options.scope); + var nonce = getString(properties.options.nonce); + var request = getString(properties.options.request); + var requestUri = getString(properties.options.requestUri); + var acrValues = getArray(properties.options.acrValues); + var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo); + var token = getString(properties.options.token); + var tokenType = getString(properties.options.tokenType); + if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) { + callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType); + } else { + callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo); + } +} + +function kbaCreateCallback() { + var prompt = getString(properties.options.prompt); + var predefinedQuestions = getArray(properties.options.predefinedQuestions); + var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions); + callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions); +} + +function languageCallback() { + var language = getString(properties.options.language); + var country = getString(properties.options.country); + callbacksBuilder.languageCallback(language, country); +} + +function metadataCallback() { + var outputValue = getObject(properties.options.outputValue); + callbacksBuilder.metadataCallback(outputValue); +} + +function nameCallback() { + var prompt = getString(properties.options.prompt); + var defaultName = getString(properties.options.defaultName); + if (isStringPresent(properties.options.defaultName)) { + callbacksBuilder.nameCallback(prompt, defaultName); + } else { + callbacksBuilder.nameCallback(prompt); + } +} + +function numberAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getDouble(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required); + } +} + +function passwordCallback() { + var prompt = getString(properties.options.prompt); + var echoOn = getBoolean(properties.options.echoOn); + callbacksBuilder.passwordCallback(prompt, echoOn); +} + +function pollingWaitCallback() { + var waitTime = getString(properties.options.waitTime); + var message = getString(properties.options.message); + callbacksBuilder.pollingWaitCallback(waitTime, message); +} + +function redirectCallback() { + throw new Error('Not Implemented'); +} + +function scriptTextOutputCallback() { + var message = getString(properties.options.message); + callbacksBuilder.scriptTextOutputCallback(message); +} + +function selectIdPCallback() { + var providers = getObject(properties.options.providers); + callbacksBuilder.selectIdPCallback(providers); +} + +function stringAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getString(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required); + } +} + +function suspendedTextOutputCallback() { + var messageType = getInt(properties.options.messageType); + var message = getString(properties.options.message); + callbacksBuilder.suspendedTextOutputCallback(messageType, message); +} + +function termsAndConditionsCallback() { + var version = getString(properties.options.version); + var terms = getString(properties.options.terms); + var createDate = getString(properties.options.createDate); + callbacksBuilder.termsAndConditionsCallback(version, terms, createDate); +} + +function textInputCallback() { + var prompt = getString(properties.options.prompt); + var defaultText = getString(properties.options.defaultText); + if (isStringPresent(properties.options.defaultText)) { + callbacksBuilder.textInputCallback(prompt, defaultText); + } else { + callbacksBuilder.textInputCallback(prompt); + } +} + +function textOutputCallback() { + var messageType = getString(properties.options.messageType); + var message = getString(properties.options.message); + callbacksBuilder.textOutputCallback(messageType, message); +} + +function validatedPasswordCallback() { + var prompt = getString(properties.options.prompt); + var echoOn = getBoolean(properties.options.echoOn); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isArrayPresent(properties.options.failedPolicies)) { + callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly); + } +} + +function validatedUsernameCallback() { + var prompt = getString(properties.options.prompt); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isArrayPresent(properties.options.failedPolicies)) { + callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly); + } +} + +function x509CertificateCallback() { + throw new Error('Not Implemented'); +} + +function getBooleanAttributeInputCallback() { + setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0)); +} + +function getChoiceCallback() { + var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed); + var selections = callbacks.getChoiceCallbacks().get(0); + setProperty(multipleSelectionsAllowed ? selections : selections[0]); +} + +function getConfirmationCallback() { + setProperty(callbacks.getConfirmationCallbacks().get(0)); +} + +function getConsentMappingCallback() { + setProperty(callbacks.getConsentMappingCallbacks().get(0)); +} + +function getDeviceProfileCallback() { + setProperty(callbacks.getDeviceProfileCallbacks().get(0)); +} + +function getHiddenValueCallback() { + var id = getString(properties.options.id); + setProperty(callbacks.getHiddenValueCallbacks().get(id)); +} + +function getHttpCallback() { + setProperty(callbacks.getHttpCallbacks().get(0)); +} + +function getIdPCallback() { + setProperty(callbacks.getIdpCallbacks().get(0)); +} + +function getKbaCreateCallback() { + setProperty(callbacks.getKbaCreateCallbacks().get(0)); +} + +function getLanguageCallback() { + setProperty(callbacks.getLanguageCallbacks().get(0)); +} + +function getNameCallback() { + setProperty(callbacks.getNameCallbacks().get(0)); +} + +function getNumberAttributeInputCallback() { + setProperty(callbacks.getNumberAttributeInputCallbacks().get(0)); +} + +function getPasswordCallback() { + setProperty(callbacks.getPasswordCallbacks().get(0)); +} + +function getSelectIdPCallback() { + setProperty(callbacks.getSelectIdPCallbacks().get(0)); +} + +function getStringAttributeInputCallback() { + setProperty(callbacks.getStringAttributeInputCallbacks().get(0)); +} + +function getTermsAndConditionsCallback() { + setProperty(callbacks.getTermsAndConditionsCallbacks().get(0)); +} + +function getTextInputCallback() { + setProperty(callbacks.getTextInputCallbacks().get(0)); +} + +function getValidatedPasswordCallback() { + setProperty(callbacks.getValidatedPasswordCallbacks().get(0)); +} + +function getValidatedUsernameCallback() { + setProperty(callbacks.getValidatedUsernameCallbacks().get(0)); +} + +function getX509CertificateCallback() { + setProperty(callbacks.getX509CertificateCallbacks().get(0)); +} + +function main() { + if (!callbacks.isEmpty()) { + switch (properties.callback) { + case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break; + case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break; + case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break; + case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break; + case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break; + case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break; + case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break; + case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break; + case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break; + case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break; + case CALLBACKS.NAME_CALLBACK: getNameCallback(); break; + case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break; + case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break; + case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break; + case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break; + case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break; + case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break; + case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break; + case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break; + case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break; + default: break; + } + action.goTo(SCRIPT_OUTCOMES.OUTCOME); + return; + } + + switch (properties.callback) { + case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break; + case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break; + case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break; + case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break; + case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break; + case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break; + case CALLBACKS.HTTP_CALLBACK: httpCallback(); break; + case CALLBACKS.IDP_CALLBACK: idPCallback(); break; + case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break; + case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break; + case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break; + case CALLBACKS.NAME_CALLBACK: nameCallback(); break; + case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break; + case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break; + case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break; + case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break; + case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break; + case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break; + case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break; + case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break; + case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break; + case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break; + case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break; + case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break; + case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break; + case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break; + default: throw new Error('Unknown Callback'); // Should never reach this case + } +} + +main(); diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/Display-Callback.nodeTypes.json b/test/e2e/exports/all-separate/classic/global/nodeTypes/Display-Callback.nodeTypes.json new file mode 100644 index 000000000..5cd596fa3 --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/Display-Callback.nodeTypes.json @@ -0,0 +1,93 @@ +{ + "nodeTypes": { + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback" + }, + "required": true, + "title": "Callback", + "type": "STRING" + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING" + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING" + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \n\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \"Hello World!\" }. \n\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\"\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT" + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING" + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING" + } + }, + "script": "file://Display-Callback.nodeTypes.js", + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/Display-State.nodeTypes.js b/test/e2e/exports/all-separate/classic/global/nodeTypes/Display-State.nodeTypes.js new file mode 100644 index 000000000..a6c7f24b3 --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/Display-State.nodeTypes.js @@ -0,0 +1,29 @@ +var SCRIPT_OUTCOMES = { + OUTCOME: "outcome" +}; + +function main() { + if (!callbacks.isEmpty()) { + action.goTo(SCRIPT_OUTCOMES.OUTCOME); + return; + } + var keySet = nodeState.keys(); // Java Set + var keys = Array.from(keySet); // Make it into JavaScript array + debugState = {}; + for (var i in keys) { + var k = new String(keys[i]); + var item = nodeState.get(k); + if (typeof item === "object") { + debugState[k] = nodeState.getObject(k); + } else { + debugState[k] = nodeState.get(k); + } + } + if (properties.displayFormat === "JSON") { + callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`); + return; + } + callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`); +} + +main(); diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/Display-State.nodeTypes.json b/test/e2e/exports/all-separate/classic/global/nodeTypes/Display-State.nodeTypes.json new file mode 100644 index 000000000..994d642df --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/Display-State.nodeTypes.json @@ -0,0 +1,35 @@ +{ + "nodeTypes": { + "8ab9f1aad4b4460a9c45d15fb148e221-1": { + "_id": "8ab9f1aad4b4460a9c45d15fb148e221-1", + "description": "Debug node that displays the shared and transient state of the journey for debugging purposes.", + "displayName": "Display State", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "displayFormat": { + "defaultValue": "TABLE", + "description": "The format in which to display the states.", + "multivalued": false, + "options": { + "JSON": "Raw JSON", + "TABLE": "HTML Table" + }, + "required": true, + "title": "Display Format", + "type": "STRING" + } + }, + "script": "file://Display-State.nodeTypes.js", + "serviceName": "8ab9f1aad4b4460a9c45d15fb148e221", + "tags": [ + "debug", + "testing" + ] + } + } +} diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/Generate-JWT.nodeTypes.js b/test/e2e/exports/all-separate/classic/global/nodeTypes/Generate-JWT.nodeTypes.js new file mode 100644 index 000000000..0c9fbfee5 --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/Generate-JWT.nodeTypes.js @@ -0,0 +1,28 @@ +var aud = properties.audience; +var iss = properties.issuer; +var validity = properties.validity; +var esv = properties.signingkey; + +var signingkey = systemEnv.getProperty(esv); + +var username = nodeState.get("username"); + +var data = { + jwtType:"SIGNED", + jwsAlgorithm: "HS256", + issuer: iss, + subject: username, + audience: aud, + type: "JWT", + validityMinutes: validity, + signingKey: signingkey +}; + +var jwt = jwtAssertion.generateJwt(data); + +if (jwt !== null && jwt.length > 0) { + nodeState.putShared("assertionJwt" , jwt); + action.goTo("True"); +} else { + action.goTo("False"); +} diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/Generate-JWT.nodeTypes.json b/test/e2e/exports/all-separate/classic/global/nodeTypes/Generate-JWT.nodeTypes.json new file mode 100644 index 000000000..f06121b2b --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/Generate-JWT.nodeTypes.json @@ -0,0 +1,54 @@ +{ + "nodeTypes": { + "e5ad0110c8ee4dafaae983003cd05d4a-1": { + "_id": "e5ad0110c8ee4dafaae983003cd05d4a-1", + "description": "Generate a signed JWT using the HMAC SHA-256 algorithm.", + "displayName": "Generate JWT", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": { + "audience": { + "description": "The audience (aud) claim", + "multivalued": false, + "required": true, + "title": "Audience", + "type": "STRING" + }, + "issuer": { + "description": "The issuer (iss) claim", + "multivalued": false, + "required": true, + "title": "Issuer", + "type": "STRING" + }, + "signingkey": { + "defaultValue": "esv.signing.key", + "description": "The secret label for the HMAC signing key", + "multivalued": false, + "required": true, + "title": "HMAC Signing Key", + "type": "STRING" + }, + "validity": { + "defaultValue": 5, + "description": "", + "multivalued": false, + "required": true, + "title": "Validity (minutes)", + "type": "NUMBER" + } + }, + "script": "file://Generate-JWT.nodeTypes.js", + "serviceName": "e5ad0110c8ee4dafaae983003cd05d4a", + "tags": [ + "Utilities", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/Has-Session-AM.nodeTypes.js b/test/e2e/exports/all-separate/classic/global/nodeTypes/Has-Session-AM.nodeTypes.js new file mode 100644 index 000000000..c8711597e --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/Has-Session-AM.nodeTypes.js @@ -0,0 +1,10 @@ +var SCRIPT_OUTCOMES = { + TRUE: 'True', + FALSE: 'False' +} + +function main() { + action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE); +} + +main(); diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/Has-Session-AM.nodeTypes.json b/test/e2e/exports/all-separate/classic/global/nodeTypes/Has-Session-AM.nodeTypes.json new file mode 100644 index 000000000..ebfb2e23d --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/Has-Session-AM.nodeTypes.json @@ -0,0 +1,22 @@ +{ + "nodeTypes": { + "session-1": { + "_id": "session-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session AM", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": "file://Has-Session-AM.nodeTypes.js", + "serviceName": "session", + "tags": [ + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/Has-Session.nodeTypes.js b/test/e2e/exports/all-separate/classic/global/nodeTypes/Has-Session.nodeTypes.js new file mode 100644 index 000000000..c8711597e --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/Has-Session.nodeTypes.js @@ -0,0 +1,10 @@ +var SCRIPT_OUTCOMES = { + TRUE: 'True', + FALSE: 'False' +} + +function main() { + action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE); +} + +main(); diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/Has-Session.nodeTypes.json b/test/e2e/exports/all-separate/classic/global/nodeTypes/Has-Session.nodeTypes.json new file mode 100644 index 000000000..0c5cd8268 --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/Has-Session.nodeTypes.json @@ -0,0 +1,22 @@ +{ + "nodeTypes": { + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": "file://Has-Session.nodeTypes.js", + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/Vector-ALU.nodeTypes.js b/test/e2e/exports/all-separate/classic/global/nodeTypes/Vector-ALU.nodeTypes.js new file mode 100644 index 000000000..91ba8e8b8 --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/Vector-ALU.nodeTypes.js @@ -0,0 +1,53 @@ +var SCRIPT_OUTCOMES = { + SUCCESS: 'Success' +}; + +var OPERATORS = { + ADD: "ADD", + SUBTRACT: "SUBTRACT", + DOT: "DOT", + CROSS: "CROSS" +} + +function add(a, b) { + return a.map((v, i) => v + b[i]); +} + +function subtract(a, b) { + return a.map((v, i) => v - b[i]); +} + +function dot(a, b) { + return a.reduce((sum, v, i) => sum + v * b[i], 0); +} + +function cross(a, b) { + return [ + a[1] * b[2] - a[2] * b[1], + a[2] * b[0] - a[0] * b[2], + a[0] * b[1] - a[1] * b[0] + ]; +} + +function main() { + if (properties.a.length !== properties.b.length) throw new Error("Vectors not the same dimension."); + switch (properties.operator) { + case OPERATORS.ADD: + nodeState.putShared("c", add(properties.a, properties.b)); + break; + case OPERATORS.SUBTRACT: + nodeState.putShared("c", subtract(properties.a, properties.b)); + break; + case OPERATORS.DOT: + nodeState.putShared("c", dot(properties.a, properties.b)); + break; + case OPERATORS.CROSS: + if (properties.a.length !== 3) throw new Error("Vectors not dimension 3 for cross product"); + nodeState.putShared("c", cross(properties.a, properties.b)); + break; + default: throw new Error("Unknown operator."); + } + action.goTo(SCRIPT_OUTCOMES.SUCCESS); +} + +main(); diff --git a/test/e2e/exports/all-separate/classic/global/nodeTypes/Vector-ALU.nodeTypes.json b/test/e2e/exports/all-separate/classic/global/nodeTypes/Vector-ALU.nodeTypes.json new file mode 100644 index 000000000..fc3fdeb76 --- /dev/null +++ b/test/e2e/exports/all-separate/classic/global/nodeTypes/Vector-ALU.nodeTypes.json @@ -0,0 +1,64 @@ +{ + "nodeTypes": { + "c15e2efb3deb4d4ea338c74a6440b69f-1": { + "_id": "c15e2efb3deb4d4ea338c74a6440b69f-1", + "description": "Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \"c\".", + "displayName": "Vector ALU", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "Success" + ], + "outputs": [ + "c" + ], + "properties": { + "a": { + "defaultValue": [ + 1, + 2, + 3 + ], + "description": "Left vector operand", + "multivalued": true, + "required": true, + "title": "A", + "type": "NUMBER" + }, + "b": { + "defaultValue": [ + 4, + 5, + 6 + ], + "description": "Right vector operand", + "multivalued": true, + "required": true, + "title": "B", + "type": "NUMBER" + }, + "operator": { + "defaultValue": "DOT", + "description": "The binary operation to perform on the vectors.", + "multivalued": false, + "options": { + "ADD": "+", + "CROSS": "X", + "DOT": ".", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": "file://Vector-ALU.nodeTypes.js", + "serviceName": "c15e2efb3deb4d4ea338c74a6440b69f", + "tags": [ + "math", + "vector", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/ALU.nodeTypes.js b/test/e2e/exports/all-separate/cloud/global/nodeTypes/ALU.nodeTypes.js new file mode 100644 index 000000000..14635619f --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/ALU.nodeTypes.js @@ -0,0 +1,34 @@ +var SCRIPT_OUTCOMES = { + SUCCESS: 'Success' +}; + +var OPERATORS = { + ADD: "ADD", + SUBTRACT: "SUBTRACT", + MULTIPLY: "MULTIPLY", + DIVIDE: "DIVIDE" +} + +function main() { + var a = Number(properties.a); + var b = Number(properties.b); + switch (properties.operator) { + case OPERATORS.ADD: + nodeState.putShared("z", a + b); + break; + case OPERATORS.SUBTRACT: + nodeState.putShared("z", a - b); + break; + case OPERATORS.MULTIPLY: + nodeState.putShared("z", a * b); + break; + case OPERATORS.DIVIDE: + if (b == 0) throw new Error("Cannot divide by 0"); + nodeState.putShared("z", a / b); + break; + default: throw new Error("Unknown operator."); + } + action.goTo(SCRIPT_OUTCOMES.SUCCESS); +} + +main(); diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/ALU.nodeTypes.json b/test/e2e/exports/all-separate/cloud/global/nodeTypes/ALU.nodeTypes.json new file mode 100644 index 000000000..e5239980e --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/ALU.nodeTypes.json @@ -0,0 +1,42 @@ +{ + "nodeTypes": { + "c6063fb2f5dc42dd9772bedc93898bd8-1": { + "_id": "c6063fb2f5dc42dd9772bedc93898bd8-1", + "description": "Simple ALU that performs basic binary math operations. Expects an \"x\" and \"y\" value on the shared state, and will produce a new \"z\" value on the shared state as output.", + "displayName": "ALU", + "errorOutcome": true, + "inputs": [ + "x", + "y" + ], + "outcomes": [ + "Success" + ], + "outputs": [ + "z" + ], + "properties": { + "operator": { + "defaultValue": "ADD", + "description": "The operation to perform.", + "multivalued": false, + "options": { + "ADD": "+", + "DIVIDE": "/", + "MULTIPLY": "*", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": "file://ALU.nodeTypes.js", + "serviceName": "c6063fb2f5dc42dd9772bedc93898bd8", + "tags": [ + "math", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/Display-Callback.nodeTypes.js b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Display-Callback.nodeTypes.js new file mode 100644 index 000000000..6b682c6c1 --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Display-Callback.nodeTypes.js @@ -0,0 +1,511 @@ +var SCRIPT_OUTCOMES = { + OUTCOME: 'outcome' +}; + +var CALLBACKS = { + BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK", + CHOICE_CALLBACK: "CHOICE_CALLBACK", + CONFIRMATION_CALLBACK: "CONFIRMATION_CALLBACK", + CONSENT_MAPPING_CALLBACK: "CONSENT_MAPPING_CALLBACK", + DEVICE_PROFILE_CALLBACK: "DEVICE_PROFILE_CALLBACK", + HIDDEN_VALUE_CALLBACK: "HIDDEN_VALUE_CALLBACK", + HTTP_CALLBACK: "HTTP_CALLBACK", + IDP_CALLBACK: "IDP_CALLBACK", + KBA_CREATE_CALLBACK: "KBA_CREATE_CALLBACK", + LANGUAGE_CALLBACK: "LANGUAGE_CALLBACK", + METADATA_CALLBACK: "METADATA_CALLBACK", + NAME_CALLBACK: "NAME_CALLBACK", + NUMBER_ATTRIBUTE_INPUT_CALLBACK: "NUMBER_ATTRIBUTE_INPUT_CALLBACK", + PASSWORD_CALLBACK: "PASSWORD_CALLBACK", + POLLING_WAIT_CALLBACK: "POLLING_WAIT_CALLBACK", + REDIRECT_CALLBACK: "REDIRECT_CALLBACK", + SCRIPT_TEXT_OUTPUT_CALLBACK: "SCRIPT_TEXT_OUTPUT_CALLBACK", + SELECT_IDP_CALLBACK: "SELECT_IDP_CALLBACK", + STRING_ATTRIBUTE_INPUT_CALLBACK: "STRING_ATTRIBUTE_INPUT_CALLBACK", + SUSPENDED_TEXT_OUTPUT_CALLBACK: "SUSPENDED_TEXT_OUTPUT_CALLBACK", + TERMS_AND_CONDITIONS_CALLBACK: "TERMS_AND_CONDITIONS_CALLBACK", + TEXT_INPUT_CALLBACK: "TEXT_INPUT_CALLBACK", + TEXT_OUTPUT_CALLBACK: "TEXT_OUTPUT_CALLBACK", + VALIDATED_PASSWORD_CALLBACK: "VALIDATED_PASSWORD_CALLBACK", + VALIDATED_USERNAME_CALLBACK: "VALIDATED_USERNAME_CALLBACK", + X509_CERTIFICATE_CALLBACK: "X509_CERTIFICATE_CALLBACK" +} + +function isStringPresent(value) { + return value; +} + +function getString(value) { + return value || ''; +} + +function isArrayPresent(value) { + return value; +} + +function getArray(value) { + return value ? JSON.parse(value) : []; +} + +function isObjectPresent(value) { + return value; +} + +function getObject(value) { + return value ? JSON.parse(value) : {}; +} + +function isIntPresent(value) { + return value; +} + +function getInt(value) { + return value ? parseInt(value) : 0; +} + +function isDoublePresent(value) { + return value; +} + +function getDouble(value) { + return value ? parseFloat(value) : 0.0; +} + +function isBooleanPresent(value) { + return value; +} + +function getBoolean(value) { + return value ? value.toLowerCase() === 'true' : false; +} + +function setProperty(value) { + if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value); + if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value); + if (properties.objectSharedProperty) { + var attributes = {}; + attributes[properties.objectSharedProperty] = value; + nodeState.mergeShared({ + objectAttributes: attributes + }); + } + if (properties.objectTransientProperty) { + var attributes = {}; + attributes[properties.objectTransientProperty] = value; + nodeState.mergeTransient({ + objectAttributes: attributes + }); + } +} + +function booleanAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getBoolean(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required); + } +} + +function choiceCallback() { + var prompt = getString(properties.options.prompt); + var choices = getArray(properties.options.choices); + var defaultChoice = getInt(properties.options.defaultChoice); + var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed); + callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed); +} + +function confirmationCallback() { + var prompt = getString(properties.options.prompt); + var messageType = getInt(properties.options.messageType); + var options = getArray(properties.options.options); + var optionType = getInt(properties.options.optionType); + var defaultOption = getInt(properties.options.defaultOption); + if (isStringPresent(properties.options.prompt)) { + if (isIntPresent(properties.options.optionType)) { + callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption); + } else { + callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption); + } + } else { + if (isIntPresent(properties.options.optionType)) { + callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption); + } else { + callbacksBuilder.confirmationCallback(messageType, options, defaultOption); + } + } +} + +function consentMappingCallback() { + var config = getObject(properties.options.config); + var message = getString(properties.options.message); + var isRequired = getBoolean(properties.options.isRequired); + var name = getString(properties.options.name); + var displayName = getString(properties.options.displayName); + var icon = getString(properties.options.icon); + var accessLevel = getString(properties.options.accessLevel); + var titles = getArray(properties.options.titles); + if (isObjectPresent(properties.options.prompt)) { + callbacksBuilder.consentMappingCallback(config, message, isRequired); + } else { + callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired); + } +} + +function deviceProfileCallback() { + var metadata = getBoolean(properties.options.metadata); + var location = getBoolean(properties.options.location); + var message = getString(properties.options.message); + callbacksBuilder.deviceProfileCallback(metadata, location, message); +} + +function hiddenValueCallback() { + var id = getString(properties.options.id); + var value = getString(properties.options.value); + callbacksBuilder.hiddenValueCallback(id, value); +} + +function httpCallback() { + var authorizationHeader = getString(properties.options.authorizationHeader); + var negotiationHeader = getString(properties.options.negotiationHeader); + var authRHeader = getString(properties.options.authRHeader); + var negoName = getString(properties.options.negoName); + var negoValue = getString(properties.options.negoValue); + if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) { + var errorCode = getString(properties.options.errorCode); + callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode); + } else { + var errorCode = getInt(properties.options.errorCode); + callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode); + } +} + +function idPCallback() { + var provider = getString(properties.options.provider); + var clientId = getString(properties.options.clientId); + var redirectUri = getString(properties.options.redirectUri); + var scope = getArray(properties.options.scope); + var nonce = getString(properties.options.nonce); + var request = getString(properties.options.request); + var requestUri = getString(properties.options.requestUri); + var acrValues = getArray(properties.options.acrValues); + var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo); + var token = getString(properties.options.token); + var tokenType = getString(properties.options.tokenType); + if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) { + callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType); + } else { + callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo); + } +} + +function kbaCreateCallback() { + var prompt = getString(properties.options.prompt); + var predefinedQuestions = getArray(properties.options.predefinedQuestions); + var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions); + callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions); +} + +function languageCallback() { + var language = getString(properties.options.language); + var country = getString(properties.options.country); + callbacksBuilder.languageCallback(language, country); +} + +function metadataCallback() { + var outputValue = getObject(properties.options.outputValue); + callbacksBuilder.metadataCallback(outputValue); +} + +function nameCallback() { + var prompt = getString(properties.options.prompt); + var defaultName = getString(properties.options.defaultName); + if (isStringPresent(properties.options.defaultName)) { + callbacksBuilder.nameCallback(prompt, defaultName); + } else { + callbacksBuilder.nameCallback(prompt); + } +} + +function numberAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getDouble(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required); + } +} + +function passwordCallback() { + var prompt = getString(properties.options.prompt); + var echoOn = getBoolean(properties.options.echoOn); + callbacksBuilder.passwordCallback(prompt, echoOn); +} + +function pollingWaitCallback() { + var waitTime = getString(properties.options.waitTime); + var message = getString(properties.options.message); + callbacksBuilder.pollingWaitCallback(waitTime, message); +} + +function redirectCallback() { + throw new Error('Not Implemented'); +} + +function scriptTextOutputCallback() { + var message = getString(properties.options.message); + callbacksBuilder.scriptTextOutputCallback(message); +} + +function selectIdPCallback() { + var providers = getObject(properties.options.providers); + callbacksBuilder.selectIdPCallback(providers); +} + +function stringAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getString(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required); + } +} + +function suspendedTextOutputCallback() { + var messageType = getInt(properties.options.messageType); + var message = getString(properties.options.message); + callbacksBuilder.suspendedTextOutputCallback(messageType, message); +} + +function termsAndConditionsCallback() { + var version = getString(properties.options.version); + var terms = getString(properties.options.terms); + var createDate = getString(properties.options.createDate); + callbacksBuilder.termsAndConditionsCallback(version, terms, createDate); +} + +function textInputCallback() { + var prompt = getString(properties.options.prompt); + var defaultText = getString(properties.options.defaultText); + if (isStringPresent(properties.options.defaultText)) { + callbacksBuilder.textInputCallback(prompt, defaultText); + } else { + callbacksBuilder.textInputCallback(prompt); + } +} + +function textOutputCallback() { + var messageType = getString(properties.options.messageType); + var message = getString(properties.options.message); + callbacksBuilder.textOutputCallback(messageType, message); +} + +function validatedPasswordCallback() { + var prompt = getString(properties.options.prompt); + var echoOn = getBoolean(properties.options.echoOn); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isArrayPresent(properties.options.failedPolicies)) { + callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly); + } +} + +function validatedUsernameCallback() { + var prompt = getString(properties.options.prompt); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isArrayPresent(properties.options.failedPolicies)) { + callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly); + } +} + +function x509CertificateCallback() { + throw new Error('Not Implemented'); +} + +function getBooleanAttributeInputCallback() { + setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0)); +} + +function getChoiceCallback() { + var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed); + var selections = callbacks.getChoiceCallbacks().get(0); + setProperty(multipleSelectionsAllowed ? selections : selections[0]); +} + +function getConfirmationCallback() { + setProperty(callbacks.getConfirmationCallbacks().get(0)); +} + +function getConsentMappingCallback() { + setProperty(callbacks.getConsentMappingCallbacks().get(0)); +} + +function getDeviceProfileCallback() { + setProperty(callbacks.getDeviceProfileCallbacks().get(0)); +} + +function getHiddenValueCallback() { + var id = getString(properties.options.id); + setProperty(callbacks.getHiddenValueCallbacks().get(id)); +} + +function getHttpCallback() { + setProperty(callbacks.getHttpCallbacks().get(0)); +} + +function getIdPCallback() { + setProperty(callbacks.getIdpCallbacks().get(0)); +} + +function getKbaCreateCallback() { + setProperty(callbacks.getKbaCreateCallbacks().get(0)); +} + +function getLanguageCallback() { + setProperty(callbacks.getLanguageCallbacks().get(0)); +} + +function getNameCallback() { + setProperty(callbacks.getNameCallbacks().get(0)); +} + +function getNumberAttributeInputCallback() { + setProperty(callbacks.getNumberAttributeInputCallbacks().get(0)); +} + +function getPasswordCallback() { + setProperty(callbacks.getPasswordCallbacks().get(0)); +} + +function getSelectIdPCallback() { + setProperty(callbacks.getSelectIdPCallbacks().get(0)); +} + +function getStringAttributeInputCallback() { + setProperty(callbacks.getStringAttributeInputCallbacks().get(0)); +} + +function getTermsAndConditionsCallback() { + setProperty(callbacks.getTermsAndConditionsCallbacks().get(0)); +} + +function getTextInputCallback() { + setProperty(callbacks.getTextInputCallbacks().get(0)); +} + +function getValidatedPasswordCallback() { + setProperty(callbacks.getValidatedPasswordCallbacks().get(0)); +} + +function getValidatedUsernameCallback() { + setProperty(callbacks.getValidatedUsernameCallbacks().get(0)); +} + +function getX509CertificateCallback() { + setProperty(callbacks.getX509CertificateCallbacks().get(0)); +} + +function main() { + if (!callbacks.isEmpty()) { + switch (properties.callback) { + case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break; + case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break; + case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break; + case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break; + case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break; + case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break; + case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break; + case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break; + case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break; + case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break; + case CALLBACKS.NAME_CALLBACK: getNameCallback(); break; + case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break; + case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break; + case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break; + case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break; + case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break; + case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break; + case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break; + case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break; + case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break; + default: break; + } + action.goTo(SCRIPT_OUTCOMES.OUTCOME); + return; + } + + switch (properties.callback) { + case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break; + case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break; + case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break; + case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break; + case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break; + case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break; + case CALLBACKS.HTTP_CALLBACK: httpCallback(); break; + case CALLBACKS.IDP_CALLBACK: idPCallback(); break; + case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break; + case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break; + case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break; + case CALLBACKS.NAME_CALLBACK: nameCallback(); break; + case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break; + case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break; + case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break; + case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break; + case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break; + case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break; + case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break; + case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break; + case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break; + case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break; + case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break; + case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break; + case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break; + case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break; + default: throw new Error('Unknown Callback'); // Should never reach this case + } +} + +main(); diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/Display-Callback.nodeTypes.json b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Display-Callback.nodeTypes.json new file mode 100644 index 000000000..5cd596fa3 --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Display-Callback.nodeTypes.json @@ -0,0 +1,93 @@ +{ + "nodeTypes": { + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback" + }, + "required": true, + "title": "Callback", + "type": "STRING" + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING" + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING" + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \n\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \"Hello World!\" }. \n\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\"\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT" + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING" + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING" + } + }, + "script": "file://Display-Callback.nodeTypes.js", + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/Display-State.nodeTypes.js b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Display-State.nodeTypes.js new file mode 100644 index 000000000..a6c7f24b3 --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Display-State.nodeTypes.js @@ -0,0 +1,29 @@ +var SCRIPT_OUTCOMES = { + OUTCOME: "outcome" +}; + +function main() { + if (!callbacks.isEmpty()) { + action.goTo(SCRIPT_OUTCOMES.OUTCOME); + return; + } + var keySet = nodeState.keys(); // Java Set + var keys = Array.from(keySet); // Make it into JavaScript array + debugState = {}; + for (var i in keys) { + var k = new String(keys[i]); + var item = nodeState.get(k); + if (typeof item === "object") { + debugState[k] = nodeState.getObject(k); + } else { + debugState[k] = nodeState.get(k); + } + } + if (properties.displayFormat === "JSON") { + callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`); + return; + } + callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`); +} + +main(); diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/Display-State.nodeTypes.json b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Display-State.nodeTypes.json new file mode 100644 index 000000000..994d642df --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Display-State.nodeTypes.json @@ -0,0 +1,35 @@ +{ + "nodeTypes": { + "8ab9f1aad4b4460a9c45d15fb148e221-1": { + "_id": "8ab9f1aad4b4460a9c45d15fb148e221-1", + "description": "Debug node that displays the shared and transient state of the journey for debugging purposes.", + "displayName": "Display State", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "displayFormat": { + "defaultValue": "TABLE", + "description": "The format in which to display the states.", + "multivalued": false, + "options": { + "JSON": "Raw JSON", + "TABLE": "HTML Table" + }, + "required": true, + "title": "Display Format", + "type": "STRING" + } + }, + "script": "file://Display-State.nodeTypes.js", + "serviceName": "8ab9f1aad4b4460a9c45d15fb148e221", + "tags": [ + "debug", + "testing" + ] + } + } +} diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/Generate-JWT.nodeTypes.js b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Generate-JWT.nodeTypes.js new file mode 100644 index 000000000..0c9fbfee5 --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Generate-JWT.nodeTypes.js @@ -0,0 +1,28 @@ +var aud = properties.audience; +var iss = properties.issuer; +var validity = properties.validity; +var esv = properties.signingkey; + +var signingkey = systemEnv.getProperty(esv); + +var username = nodeState.get("username"); + +var data = { + jwtType:"SIGNED", + jwsAlgorithm: "HS256", + issuer: iss, + subject: username, + audience: aud, + type: "JWT", + validityMinutes: validity, + signingKey: signingkey +}; + +var jwt = jwtAssertion.generateJwt(data); + +if (jwt !== null && jwt.length > 0) { + nodeState.putShared("assertionJwt" , jwt); + action.goTo("True"); +} else { + action.goTo("False"); +} diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/Generate-JWT.nodeTypes.json b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Generate-JWT.nodeTypes.json new file mode 100644 index 000000000..f06121b2b --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Generate-JWT.nodeTypes.json @@ -0,0 +1,54 @@ +{ + "nodeTypes": { + "e5ad0110c8ee4dafaae983003cd05d4a-1": { + "_id": "e5ad0110c8ee4dafaae983003cd05d4a-1", + "description": "Generate a signed JWT using the HMAC SHA-256 algorithm.", + "displayName": "Generate JWT", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": { + "audience": { + "description": "The audience (aud) claim", + "multivalued": false, + "required": true, + "title": "Audience", + "type": "STRING" + }, + "issuer": { + "description": "The issuer (iss) claim", + "multivalued": false, + "required": true, + "title": "Issuer", + "type": "STRING" + }, + "signingkey": { + "defaultValue": "esv.signing.key", + "description": "The secret label for the HMAC signing key", + "multivalued": false, + "required": true, + "title": "HMAC Signing Key", + "type": "STRING" + }, + "validity": { + "defaultValue": 5, + "description": "", + "multivalued": false, + "required": true, + "title": "Validity (minutes)", + "type": "NUMBER" + } + }, + "script": "file://Generate-JWT.nodeTypes.js", + "serviceName": "e5ad0110c8ee4dafaae983003cd05d4a", + "tags": [ + "Utilities", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/Has-Session-AM.nodeTypes.js b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Has-Session-AM.nodeTypes.js new file mode 100644 index 000000000..c8711597e --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Has-Session-AM.nodeTypes.js @@ -0,0 +1,10 @@ +var SCRIPT_OUTCOMES = { + TRUE: 'True', + FALSE: 'False' +} + +function main() { + action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE); +} + +main(); diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/Has-Session-AM.nodeTypes.json b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Has-Session-AM.nodeTypes.json new file mode 100644 index 000000000..ebfb2e23d --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Has-Session-AM.nodeTypes.json @@ -0,0 +1,22 @@ +{ + "nodeTypes": { + "session-1": { + "_id": "session-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session AM", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": "file://Has-Session-AM.nodeTypes.js", + "serviceName": "session", + "tags": [ + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/Has-Session.nodeTypes.js b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Has-Session.nodeTypes.js new file mode 100644 index 000000000..c8711597e --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Has-Session.nodeTypes.js @@ -0,0 +1,10 @@ +var SCRIPT_OUTCOMES = { + TRUE: 'True', + FALSE: 'False' +} + +function main() { + action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE); +} + +main(); diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/Has-Session.nodeTypes.json b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Has-Session.nodeTypes.json new file mode 100644 index 000000000..0c5cd8268 --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Has-Session.nodeTypes.json @@ -0,0 +1,22 @@ +{ + "nodeTypes": { + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": "file://Has-Session.nodeTypes.js", + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/Vector-ALU.nodeTypes.js b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Vector-ALU.nodeTypes.js new file mode 100644 index 000000000..91ba8e8b8 --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Vector-ALU.nodeTypes.js @@ -0,0 +1,53 @@ +var SCRIPT_OUTCOMES = { + SUCCESS: 'Success' +}; + +var OPERATORS = { + ADD: "ADD", + SUBTRACT: "SUBTRACT", + DOT: "DOT", + CROSS: "CROSS" +} + +function add(a, b) { + return a.map((v, i) => v + b[i]); +} + +function subtract(a, b) { + return a.map((v, i) => v - b[i]); +} + +function dot(a, b) { + return a.reduce((sum, v, i) => sum + v * b[i], 0); +} + +function cross(a, b) { + return [ + a[1] * b[2] - a[2] * b[1], + a[2] * b[0] - a[0] * b[2], + a[0] * b[1] - a[1] * b[0] + ]; +} + +function main() { + if (properties.a.length !== properties.b.length) throw new Error("Vectors not the same dimension."); + switch (properties.operator) { + case OPERATORS.ADD: + nodeState.putShared("c", add(properties.a, properties.b)); + break; + case OPERATORS.SUBTRACT: + nodeState.putShared("c", subtract(properties.a, properties.b)); + break; + case OPERATORS.DOT: + nodeState.putShared("c", dot(properties.a, properties.b)); + break; + case OPERATORS.CROSS: + if (properties.a.length !== 3) throw new Error("Vectors not dimension 3 for cross product"); + nodeState.putShared("c", cross(properties.a, properties.b)); + break; + default: throw new Error("Unknown operator."); + } + action.goTo(SCRIPT_OUTCOMES.SUCCESS); +} + +main(); diff --git a/test/e2e/exports/all-separate/cloud/global/nodeTypes/Vector-ALU.nodeTypes.json b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Vector-ALU.nodeTypes.json new file mode 100644 index 000000000..fc3fdeb76 --- /dev/null +++ b/test/e2e/exports/all-separate/cloud/global/nodeTypes/Vector-ALU.nodeTypes.json @@ -0,0 +1,64 @@ +{ + "nodeTypes": { + "c15e2efb3deb4d4ea338c74a6440b69f-1": { + "_id": "c15e2efb3deb4d4ea338c74a6440b69f-1", + "description": "Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \"c\".", + "displayName": "Vector ALU", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "Success" + ], + "outputs": [ + "c" + ], + "properties": { + "a": { + "defaultValue": [ + 1, + 2, + 3 + ], + "description": "Left vector operand", + "multivalued": true, + "required": true, + "title": "A", + "type": "NUMBER" + }, + "b": { + "defaultValue": [ + 4, + 5, + 6 + ], + "description": "Right vector operand", + "multivalued": true, + "required": true, + "title": "B", + "type": "NUMBER" + }, + "operator": { + "defaultValue": "DOT", + "description": "The binary operation to perform on the vectors.", + "multivalued": false, + "options": { + "ADD": "+", + "CROSS": "X", + "DOT": ".", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": "file://Vector-ALU.nodeTypes.js", + "serviceName": "c15e2efb3deb4d4ea338c74a6440b69f", + "tags": [ + "math", + "vector", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/all/all.classic.json b/test/e2e/exports/all/all.classic.json index 0837b7a39..374fc2fe7 100644 --- a/test/e2e/exports/all/all.classic.json +++ b/test/e2e/exports/all/all.classic.json @@ -1085,6 +1085,1000 @@ } } }, + "nodeTypes": { + "8ab9f1aad4b4460a9c45d15fb148e221-1": { + "_id": "8ab9f1aad4b4460a9c45d15fb148e221-1", + "description": "Debug node that displays the shared and transient state of the journey for debugging purposes.", + "displayName": "Display State", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "displayFormat": { + "defaultValue": "TABLE", + "description": "The format in which to display the states.", + "multivalued": false, + "options": { + "JSON": "Raw JSON", + "TABLE": "HTML Table" + }, + "required": true, + "title": "Display Format", + "type": "STRING" + } + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " OUTCOME: \"outcome\"", + "};", + "", + "function main() {", + " if (!callbacks.isEmpty()) {", + " action.goTo(SCRIPT_OUTCOMES.OUTCOME);", + " return;", + " }", + " var keySet = nodeState.keys(); // Java Set", + " var keys = Array.from(keySet); // Make it into JavaScript array", + " debugState = {};", + " for (var i in keys) {", + " var k = new String(keys[i]);", + " var item = nodeState.get(k);", + " if (typeof item === \"object\") {", + " debugState[k] = nodeState.getObject(k);", + " } else {", + " debugState[k] = nodeState.get(k);", + " }", + " }", + " if (properties.displayFormat === \"JSON\") {", + " callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);", + " return;", + " }", + " callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);", + "}", + "", + "main();", + "" + ], + "serviceName": "8ab9f1aad4b4460a9c45d15fb148e221", + "tags": [ + "debug", + "testing" + ] + }, + "c15e2efb3deb4d4ea338c74a6440b69f-1": { + "_id": "c15e2efb3deb4d4ea338c74a6440b69f-1", + "description": "Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \"c\".", + "displayName": "Vector ALU", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "Success" + ], + "outputs": [ + "c" + ], + "properties": { + "a": { + "defaultValue": [ + 1, + 2, + 3 + ], + "description": "Left vector operand", + "multivalued": true, + "required": true, + "title": "A", + "type": "NUMBER" + }, + "b": { + "defaultValue": [ + 4, + 5, + 6 + ], + "description": "Right vector operand", + "multivalued": true, + "required": true, + "title": "B", + "type": "NUMBER" + }, + "operator": { + "defaultValue": "DOT", + "description": "The binary operation to perform on the vectors.", + "multivalued": false, + "options": { + "ADD": "+", + "CROSS": "X", + "DOT": ".", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " SUCCESS: 'Success'", + "};", + "", + "var OPERATORS = {", + " ADD: \"ADD\",", + " SUBTRACT: \"SUBTRACT\",", + " DOT: \"DOT\",", + " CROSS: \"CROSS\"", + "}", + "", + "function add(a, b) {", + " return a.map((v, i) => v + b[i]);", + "}", + "", + "function subtract(a, b) {", + " return a.map((v, i) => v - b[i]);", + "}", + "", + "function dot(a, b) {", + " return a.reduce((sum, v, i) => sum + v * b[i], 0);", + "}", + "", + "function cross(a, b) {", + " return [", + " a[1] * b[2] - a[2] * b[1],", + " a[2] * b[0] - a[0] * b[2],", + " a[0] * b[1] - a[1] * b[0]", + " ];", + "}", + "", + "function main() {", + " if (properties.a.length !== properties.b.length) throw new Error(\"Vectors not the same dimension.\");", + " switch (properties.operator) {", + " case OPERATORS.ADD:", + " nodeState.putShared(\"c\", add(properties.a, properties.b));", + " break;", + " case OPERATORS.SUBTRACT:", + " nodeState.putShared(\"c\", subtract(properties.a, properties.b));", + " break;", + " case OPERATORS.DOT:", + " nodeState.putShared(\"c\", dot(properties.a, properties.b));", + " break;", + " case OPERATORS.CROSS:", + " if (properties.a.length !== 3) throw new Error(\"Vectors not dimension 3 for cross product\");", + " nodeState.putShared(\"c\", cross(properties.a, properties.b));", + " break;", + " default: throw new Error(\"Unknown operator.\");", + " }", + " action.goTo(SCRIPT_OUTCOMES.SUCCESS);", + "}", + "", + "main();", + "" + ], + "serviceName": "c15e2efb3deb4d4ea338c74a6440b69f", + "tags": [ + "math", + "vector", + "utilities" + ] + }, + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": [ + "var SCRIPT_OUTCOMES = {", + " TRUE: 'True',", + " FALSE: 'False'", + "}", + "", + "function main() {", + " action.goTo(typeof existingSession === \"undefined\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);", + "}", + "", + "main();", + "" + ], + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities" + ] + }, + "c6063fb2f5dc42dd9772bedc93898bd8-1": { + "_id": "c6063fb2f5dc42dd9772bedc93898bd8-1", + "description": "Simple ALU that performs basic binary math operations. Expects an \"x\" and \"y\" value on the shared state, and will produce a new \"z\" value on the shared state as output.", + "displayName": "ALU", + "errorOutcome": true, + "inputs": [ + "x", + "y" + ], + "outcomes": [ + "Success" + ], + "outputs": [ + "z" + ], + "properties": { + "operator": { + "defaultValue": "ADD", + "description": "The operation to perform.", + "multivalued": false, + "options": { + "ADD": "+", + "DIVIDE": "/", + "MULTIPLY": "*", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " SUCCESS: 'Success'", + "};", + "", + "var OPERATORS = {", + " ADD: \"ADD\",", + " SUBTRACT: \"SUBTRACT\",", + " MULTIPLY: \"MULTIPLY\",", + " DIVIDE: \"DIVIDE\"", + "}", + "", + "function main() {", + " var a = Number(properties.a);", + " var b = Number(properties.b);", + " switch (properties.operator) {", + " case OPERATORS.ADD:", + " nodeState.putShared(\"z\", a + b);", + " break;", + " case OPERATORS.SUBTRACT:", + " nodeState.putShared(\"z\", a - b);", + " break;", + " case OPERATORS.MULTIPLY:", + " nodeState.putShared(\"z\", a * b);", + " break;", + " case OPERATORS.DIVIDE:", + " if (b == 0) throw new Error(\"Cannot divide by 0\");", + " nodeState.putShared(\"z\", a / b);", + " break;", + " default: throw new Error(\"Unknown operator.\");", + " }", + " action.goTo(SCRIPT_OUTCOMES.SUCCESS);", + "}", + "", + "main();", + "" + ], + "serviceName": "c6063fb2f5dc42dd9772bedc93898bd8", + "tags": [ + "math", + "utilities" + ] + }, + "e5ad0110c8ee4dafaae983003cd05d4a-1": { + "_id": "e5ad0110c8ee4dafaae983003cd05d4a-1", + "description": "Generate a signed JWT using the HMAC SHA-256 algorithm.", + "displayName": "Generate JWT", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": { + "audience": { + "description": "The audience (aud) claim", + "multivalued": false, + "required": true, + "title": "Audience", + "type": "STRING" + }, + "issuer": { + "description": "The issuer (iss) claim", + "multivalued": false, + "required": true, + "title": "Issuer", + "type": "STRING" + }, + "signingkey": { + "defaultValue": "esv.signing.key", + "description": "The secret label for the HMAC signing key", + "multivalued": false, + "required": true, + "title": "HMAC Signing Key", + "type": "STRING" + }, + "validity": { + "defaultValue": 5, + "description": "", + "multivalued": false, + "required": true, + "title": "Validity (minutes)", + "type": "NUMBER" + } + }, + "script": [ + "var aud = properties.audience;", + "var iss = properties.issuer;", + "var validity = properties.validity;", + "var esv = properties.signingkey;", + "", + "var signingkey = systemEnv.getProperty(esv);", + "", + "var username = nodeState.get(\"username\");", + "", + "var data = {", + " jwtType:\"SIGNED\",", + " jwsAlgorithm: \"HS256\",", + " issuer: iss,", + " subject: username,", + " audience: aud,", + " type: \"JWT\",", + " validityMinutes: validity,", + " signingKey: signingkey", + "};", + "", + "var jwt = jwtAssertion.generateJwt(data);", + "", + "if (jwt !== null && jwt.length > 0) {", + " nodeState.putShared(\"assertionJwt\" , jwt);", + " action.goTo(\"True\");", + "} else {", + " action.goTo(\"False\");", + "}" + ], + "serviceName": "e5ad0110c8ee4dafaae983003cd05d4a", + "tags": [ + "Utilities", + "utilities" + ] + }, + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback" + }, + "required": true, + "title": "Callback", + "type": "STRING" + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING" + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING" + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \n\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \"Hello World!\" }. \n\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\"\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT" + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING" + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING" + } + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " OUTCOME: 'outcome'", + "};", + "", + "var CALLBACKS = {", + "\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\",", + "\tCHOICE_CALLBACK: \"CHOICE_CALLBACK\",", + "\tCONFIRMATION_CALLBACK: \"CONFIRMATION_CALLBACK\",", + "\tCONSENT_MAPPING_CALLBACK: \"CONSENT_MAPPING_CALLBACK\",", + "\tDEVICE_PROFILE_CALLBACK: \"DEVICE_PROFILE_CALLBACK\",", + "\tHIDDEN_VALUE_CALLBACK: \"HIDDEN_VALUE_CALLBACK\",", + "\tHTTP_CALLBACK: \"HTTP_CALLBACK\",", + "\tIDP_CALLBACK: \"IDP_CALLBACK\",", + "\tKBA_CREATE_CALLBACK: \"KBA_CREATE_CALLBACK\",", + "\tLANGUAGE_CALLBACK: \"LANGUAGE_CALLBACK\",", + "\tMETADATA_CALLBACK: \"METADATA_CALLBACK\",", + "\tNAME_CALLBACK: \"NAME_CALLBACK\",", + "\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \"NUMBER_ATTRIBUTE_INPUT_CALLBACK\",", + "\tPASSWORD_CALLBACK: \"PASSWORD_CALLBACK\",", + "\tPOLLING_WAIT_CALLBACK: \"POLLING_WAIT_CALLBACK\",", + " REDIRECT_CALLBACK: \"REDIRECT_CALLBACK\",", + "\tSCRIPT_TEXT_OUTPUT_CALLBACK: \"SCRIPT_TEXT_OUTPUT_CALLBACK\",", + "\tSELECT_IDP_CALLBACK: \"SELECT_IDP_CALLBACK\",", + "\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \"STRING_ATTRIBUTE_INPUT_CALLBACK\",", + "\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \"SUSPENDED_TEXT_OUTPUT_CALLBACK\",", + "\tTERMS_AND_CONDITIONS_CALLBACK: \"TERMS_AND_CONDITIONS_CALLBACK\",", + "\tTEXT_INPUT_CALLBACK: \"TEXT_INPUT_CALLBACK\",", + "\tTEXT_OUTPUT_CALLBACK: \"TEXT_OUTPUT_CALLBACK\",", + "\tVALIDATED_PASSWORD_CALLBACK: \"VALIDATED_PASSWORD_CALLBACK\",", + "\tVALIDATED_USERNAME_CALLBACK: \"VALIDATED_USERNAME_CALLBACK\",", + "\tX509_CERTIFICATE_CALLBACK: \"X509_CERTIFICATE_CALLBACK\"", + "}", + "", + "function isStringPresent(value) {", + " return value;", + "}", + "", + "function getString(value) {", + " return value || '';", + "}", + "", + "function isArrayPresent(value) {", + " return value;", + "}", + "", + "function getArray(value) {", + " return value ? JSON.parse(value) : [];", + "}", + "", + "function isObjectPresent(value) {", + " return value;", + "}", + "", + "function getObject(value) {", + " return value ? JSON.parse(value) : {};", + "}", + "", + "function isIntPresent(value) {", + " return value;", + "}", + "", + "function getInt(value) {", + " return value ? parseInt(value) : 0;", + "}", + "", + "function isDoublePresent(value) {", + " return value;", + "}", + "", + "function getDouble(value) {", + " return value ? parseFloat(value) : 0.0;", + "}", + "", + "function isBooleanPresent(value) {", + " return value;", + "}", + "", + "function getBoolean(value) {", + " return value ? value.toLowerCase() === 'true' : false;", + "}", + "", + "function setProperty(value) {", + " if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);", + " if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);", + " if (properties.objectSharedProperty) {", + " var attributes = {};", + " attributes[properties.objectSharedProperty] = value;", + " nodeState.mergeShared({", + " objectAttributes: attributes", + " });", + " }", + " if (properties.objectTransientProperty) {", + " var attributes = {};", + " attributes[properties.objectTransientProperty] = value;", + " nodeState.mergeTransient({", + " objectAttributes: attributes", + " });", + " }", + "}", + "", + "function booleanAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getBoolean(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function choiceCallback() {", + " var prompt = getString(properties.options.prompt);", + " var choices = getArray(properties.options.choices);", + " var defaultChoice = getInt(properties.options.defaultChoice);", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);", + "}", + "", + "function confirmationCallback() {", + " var prompt = getString(properties.options.prompt);", + " var messageType = getInt(properties.options.messageType);", + " var options = getArray(properties.options.options);", + " var optionType = getInt(properties.options.optionType);", + " var defaultOption = getInt(properties.options.defaultOption);", + " if (isStringPresent(properties.options.prompt)) {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);", + " }", + " } else {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(messageType, options, defaultOption);", + " }", + " }", + "}", + "", + "function consentMappingCallback() {", + " var config = getObject(properties.options.config);", + " var message = getString(properties.options.message);", + " var isRequired = getBoolean(properties.options.isRequired);", + " var name = getString(properties.options.name);", + " var displayName = getString(properties.options.displayName);", + " var icon = getString(properties.options.icon);", + " var accessLevel = getString(properties.options.accessLevel);", + " var titles = getArray(properties.options.titles);", + " if (isObjectPresent(properties.options.prompt)) {", + " callbacksBuilder.consentMappingCallback(config, message, isRequired);", + " } else {", + " callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);", + " }", + "}", + "", + "function deviceProfileCallback() {", + " var metadata = getBoolean(properties.options.metadata);", + " var location = getBoolean(properties.options.location);", + " var message = getString(properties.options.message);", + " callbacksBuilder.deviceProfileCallback(metadata, location, message);", + "}", + "", + "function hiddenValueCallback() {", + " var id = getString(properties.options.id);", + " var value = getString(properties.options.value);", + " callbacksBuilder.hiddenValueCallback(id, value);", + "}", + "", + "function httpCallback() {", + " var authorizationHeader = getString(properties.options.authorizationHeader);", + " var negotiationHeader = getString(properties.options.negotiationHeader);", + " var authRHeader = getString(properties.options.authRHeader);", + " var negoName = getString(properties.options.negoName);", + " var negoValue = getString(properties.options.negoValue);", + " if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {", + " var errorCode = getString(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);", + " } else {", + " var errorCode = getInt(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);", + " }", + "}", + "", + "function idPCallback() {", + " var provider = getString(properties.options.provider);", + " var clientId = getString(properties.options.clientId);", + " var redirectUri = getString(properties.options.redirectUri);", + " var scope = getArray(properties.options.scope);", + " var nonce = getString(properties.options.nonce);", + " var request = getString(properties.options.request);", + " var requestUri = getString(properties.options.requestUri);", + " var acrValues = getArray(properties.options.acrValues);", + " var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);", + " var token = getString(properties.options.token);", + " var tokenType = getString(properties.options.tokenType);", + " if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);", + " } else {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);", + " }", + "}", + "", + "function kbaCreateCallback() {", + " var prompt = getString(properties.options.prompt);", + " var predefinedQuestions = getArray(properties.options.predefinedQuestions);", + " var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);", + " callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);", + "}", + "", + "function languageCallback() {", + " var language = getString(properties.options.language);", + " var country = getString(properties.options.country);", + " callbacksBuilder.languageCallback(language, country);", + "}", + "", + "function metadataCallback() {", + " var outputValue = getObject(properties.options.outputValue);", + " callbacksBuilder.metadataCallback(outputValue);", + "}", + "", + "function nameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultName = getString(properties.options.defaultName);", + " if (isStringPresent(properties.options.defaultName)) {", + " callbacksBuilder.nameCallback(prompt, defaultName);", + " } else {", + " callbacksBuilder.nameCallback(prompt);", + " }", + "}", + "", + "function numberAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getDouble(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function passwordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " callbacksBuilder.passwordCallback(prompt, echoOn);", + "}", + "", + "function pollingWaitCallback() {", + " var waitTime = getString(properties.options.waitTime);", + " var message = getString(properties.options.message);", + " callbacksBuilder.pollingWaitCallback(waitTime, message);", + "}", + "", + "function redirectCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function scriptTextOutputCallback() {", + " var message = getString(properties.options.message);", + " callbacksBuilder.scriptTextOutputCallback(message);", + "}", + "", + "function selectIdPCallback() {", + " var providers = getObject(properties.options.providers);", + " callbacksBuilder.selectIdPCallback(providers);", + "}", + "", + "function stringAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getString(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function suspendedTextOutputCallback() {", + " var messageType = getInt(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.suspendedTextOutputCallback(messageType, message);", + "}", + "", + "function termsAndConditionsCallback() {", + " var version = getString(properties.options.version);", + " var terms = getString(properties.options.terms);", + " var createDate = getString(properties.options.createDate);", + " callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);", + "}", + "", + "function textInputCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultText = getString(properties.options.defaultText);", + " if (isStringPresent(properties.options.defaultText)) {", + " callbacksBuilder.textInputCallback(prompt, defaultText);", + " } else {", + " callbacksBuilder.textInputCallback(prompt);", + " }", + "}", + "", + "function textOutputCallback() {", + " var messageType = getString(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.textOutputCallback(messageType, message);", + "}", + "", + "function validatedPasswordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);", + " }", + "}", + "", + "function validatedUsernameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);", + " }", + "}", + "", + "function x509CertificateCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function getBooleanAttributeInputCallback() {", + " setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));", + "}", + "", + "function getChoiceCallback() {", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " var selections = callbacks.getChoiceCallbacks().get(0);", + " setProperty(multipleSelectionsAllowed ? selections : selections[0]);", + "}", + "", + "function getConfirmationCallback() {", + " setProperty(callbacks.getConfirmationCallbacks().get(0));", + "}", + "", + "function getConsentMappingCallback() {", + " setProperty(callbacks.getConsentMappingCallbacks().get(0));", + "}", + "", + "function getDeviceProfileCallback() {", + " setProperty(callbacks.getDeviceProfileCallbacks().get(0));", + "}", + "", + "function getHiddenValueCallback() {", + " var id = getString(properties.options.id);", + " setProperty(callbacks.getHiddenValueCallbacks().get(id));", + "}", + "", + "function getHttpCallback() {", + " setProperty(callbacks.getHttpCallbacks().get(0));", + "}", + "", + "function getIdPCallback() {", + " setProperty(callbacks.getIdpCallbacks().get(0));", + "}", + "", + "function getKbaCreateCallback() {", + " setProperty(callbacks.getKbaCreateCallbacks().get(0));", + "}", + "", + "function getLanguageCallback() {", + " setProperty(callbacks.getLanguageCallbacks().get(0));", + "}", + "", + "function getNameCallback() {", + " setProperty(callbacks.getNameCallbacks().get(0));", + "}", + "", + "function getNumberAttributeInputCallback() {", + " setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));", + "}", + "", + "function getPasswordCallback() {", + " setProperty(callbacks.getPasswordCallbacks().get(0));", + "}", + "", + "function getSelectIdPCallback() {", + " setProperty(callbacks.getSelectIdPCallbacks().get(0));", + "}", + "", + "function getStringAttributeInputCallback() {", + " setProperty(callbacks.getStringAttributeInputCallbacks().get(0));", + "}", + "", + "function getTermsAndConditionsCallback() {", + " setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));", + "}", + "", + "function getTextInputCallback() {", + " setProperty(callbacks.getTextInputCallbacks().get(0));", + "}", + "", + "function getValidatedPasswordCallback() {", + " setProperty(callbacks.getValidatedPasswordCallbacks().get(0));", + "}", + "", + "function getValidatedUsernameCallback() {", + " setProperty(callbacks.getValidatedUsernameCallbacks().get(0));", + "}", + "", + "function getX509CertificateCallback() {", + " setProperty(callbacks.getX509CertificateCallbacks().get(0));", + "}", + "", + "function main() {", + " if (!callbacks.isEmpty()) {", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;", + " default: break;", + " }", + " action.goTo(SCRIPT_OUTCOMES.OUTCOME);", + " return;", + " }", + "", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: idPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;", + " case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: nameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;", + " case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;", + " case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;", + " case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;", + " case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;", + " case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;", + " default: throw new Error('Unknown Callback'); // Should never reach this case", + " }", + "}", + "", + "main();", + "" + ], + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities" + ] + }, + "session-1": { + "_id": "session-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session AM", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": [ + "var SCRIPT_OUTCOMES = {", + " TRUE: 'True',", + " FALSE: 'False'", + "}", + "", + "function main() {", + " action.goTo(typeof existingSession === \"undefined\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);", + "}", + "", + "main();", + "" + ], + "serviceName": "session", + "tags": [ + "utilities" + ] + } + }, "realm": { "L2ZpcnN0": { "_id": "L2ZpcnN0", diff --git a/test/e2e/exports/all/all.cloud.json b/test/e2e/exports/all/all.cloud.json index a966af96b..29cb9a41b 100644 --- a/test/e2e/exports/all/all.cloud.json +++ b/test/e2e/exports/all/all.cloud.json @@ -13745,6 +13745,1000 @@ } } }, + "nodeTypes": { + "8ab9f1aad4b4460a9c45d15fb148e221-1": { + "_id": "8ab9f1aad4b4460a9c45d15fb148e221-1", + "description": "Debug node that displays the shared and transient state of the journey for debugging purposes.", + "displayName": "Display State", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "displayFormat": { + "defaultValue": "TABLE", + "description": "The format in which to display the states.", + "multivalued": false, + "options": { + "JSON": "Raw JSON", + "TABLE": "HTML Table" + }, + "required": true, + "title": "Display Format", + "type": "STRING" + } + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " OUTCOME: \"outcome\"", + "};", + "", + "function main() {", + " if (!callbacks.isEmpty()) {", + " action.goTo(SCRIPT_OUTCOMES.OUTCOME);", + " return;", + " }", + " var keySet = nodeState.keys(); // Java Set", + " var keys = Array.from(keySet); // Make it into JavaScript array", + " debugState = {};", + " for (var i in keys) {", + " var k = new String(keys[i]);", + " var item = nodeState.get(k);", + " if (typeof item === \"object\") {", + " debugState[k] = nodeState.getObject(k);", + " } else {", + " debugState[k] = nodeState.get(k);", + " }", + " }", + " if (properties.displayFormat === \"JSON\") {", + " callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);", + " return;", + " }", + " callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);", + "}", + "", + "main();", + "" + ], + "serviceName": "8ab9f1aad4b4460a9c45d15fb148e221", + "tags": [ + "debug", + "testing" + ] + }, + "c15e2efb3deb4d4ea338c74a6440b69f-1": { + "_id": "c15e2efb3deb4d4ea338c74a6440b69f-1", + "description": "Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \"c\".", + "displayName": "Vector ALU", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "Success" + ], + "outputs": [ + "c" + ], + "properties": { + "a": { + "defaultValue": [ + 1, + 2, + 3 + ], + "description": "Left vector operand", + "multivalued": true, + "required": true, + "title": "A", + "type": "NUMBER" + }, + "b": { + "defaultValue": [ + 4, + 5, + 6 + ], + "description": "Right vector operand", + "multivalued": true, + "required": true, + "title": "B", + "type": "NUMBER" + }, + "operator": { + "defaultValue": "DOT", + "description": "The binary operation to perform on the vectors.", + "multivalued": false, + "options": { + "ADD": "+", + "CROSS": "X", + "DOT": ".", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " SUCCESS: 'Success'", + "};", + "", + "var OPERATORS = {", + " ADD: \"ADD\",", + " SUBTRACT: \"SUBTRACT\",", + " DOT: \"DOT\",", + " CROSS: \"CROSS\"", + "}", + "", + "function add(a, b) {", + " return a.map((v, i) => v + b[i]);", + "}", + "", + "function subtract(a, b) {", + " return a.map((v, i) => v - b[i]);", + "}", + "", + "function dot(a, b) {", + " return a.reduce((sum, v, i) => sum + v * b[i], 0);", + "}", + "", + "function cross(a, b) {", + " return [", + " a[1] * b[2] - a[2] * b[1],", + " a[2] * b[0] - a[0] * b[2],", + " a[0] * b[1] - a[1] * b[0]", + " ];", + "}", + "", + "function main() {", + " if (properties.a.length !== properties.b.length) throw new Error(\"Vectors not the same dimension.\");", + " switch (properties.operator) {", + " case OPERATORS.ADD:", + " nodeState.putShared(\"c\", add(properties.a, properties.b));", + " break;", + " case OPERATORS.SUBTRACT:", + " nodeState.putShared(\"c\", subtract(properties.a, properties.b));", + " break;", + " case OPERATORS.DOT:", + " nodeState.putShared(\"c\", dot(properties.a, properties.b));", + " break;", + " case OPERATORS.CROSS:", + " if (properties.a.length !== 3) throw new Error(\"Vectors not dimension 3 for cross product\");", + " nodeState.putShared(\"c\", cross(properties.a, properties.b));", + " break;", + " default: throw new Error(\"Unknown operator.\");", + " }", + " action.goTo(SCRIPT_OUTCOMES.SUCCESS);", + "}", + "", + "main();", + "" + ], + "serviceName": "c15e2efb3deb4d4ea338c74a6440b69f", + "tags": [ + "math", + "vector", + "utilities" + ] + }, + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": [ + "var SCRIPT_OUTCOMES = {", + " TRUE: 'True',", + " FALSE: 'False'", + "}", + "", + "function main() {", + " action.goTo(typeof existingSession === \"undefined\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);", + "}", + "", + "main();", + "" + ], + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities" + ] + }, + "c6063fb2f5dc42dd9772bedc93898bd8-1": { + "_id": "c6063fb2f5dc42dd9772bedc93898bd8-1", + "description": "Simple ALU that performs basic binary math operations. Expects an \"x\" and \"y\" value on the shared state, and will produce a new \"z\" value on the shared state as output.", + "displayName": "ALU", + "errorOutcome": true, + "inputs": [ + "x", + "y" + ], + "outcomes": [ + "Success" + ], + "outputs": [ + "z" + ], + "properties": { + "operator": { + "defaultValue": "ADD", + "description": "The operation to perform.", + "multivalued": false, + "options": { + "ADD": "+", + "DIVIDE": "/", + "MULTIPLY": "*", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " SUCCESS: 'Success'", + "};", + "", + "var OPERATORS = {", + " ADD: \"ADD\",", + " SUBTRACT: \"SUBTRACT\",", + " MULTIPLY: \"MULTIPLY\",", + " DIVIDE: \"DIVIDE\"", + "}", + "", + "function main() {", + " var a = Number(properties.a);", + " var b = Number(properties.b);", + " switch (properties.operator) {", + " case OPERATORS.ADD:", + " nodeState.putShared(\"z\", a + b);", + " break;", + " case OPERATORS.SUBTRACT:", + " nodeState.putShared(\"z\", a - b);", + " break;", + " case OPERATORS.MULTIPLY:", + " nodeState.putShared(\"z\", a * b);", + " break;", + " case OPERATORS.DIVIDE:", + " if (b == 0) throw new Error(\"Cannot divide by 0\");", + " nodeState.putShared(\"z\", a / b);", + " break;", + " default: throw new Error(\"Unknown operator.\");", + " }", + " action.goTo(SCRIPT_OUTCOMES.SUCCESS);", + "}", + "", + "main();", + "" + ], + "serviceName": "c6063fb2f5dc42dd9772bedc93898bd8", + "tags": [ + "math", + "utilities" + ] + }, + "e5ad0110c8ee4dafaae983003cd05d4a-1": { + "_id": "e5ad0110c8ee4dafaae983003cd05d4a-1", + "description": "Generate a signed JWT using the HMAC SHA-256 algorithm.", + "displayName": "Generate JWT", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": { + "audience": { + "description": "The audience (aud) claim", + "multivalued": false, + "required": true, + "title": "Audience", + "type": "STRING" + }, + "issuer": { + "description": "The issuer (iss) claim", + "multivalued": false, + "required": true, + "title": "Issuer", + "type": "STRING" + }, + "signingkey": { + "defaultValue": "esv.signing.key", + "description": "The secret label for the HMAC signing key", + "multivalued": false, + "required": true, + "title": "HMAC Signing Key", + "type": "STRING" + }, + "validity": { + "defaultValue": 5, + "description": "", + "multivalued": false, + "required": true, + "title": "Validity (minutes)", + "type": "NUMBER" + } + }, + "script": [ + "var aud = properties.audience;", + "var iss = properties.issuer;", + "var validity = properties.validity;", + "var esv = properties.signingkey;", + "", + "var signingkey = systemEnv.getProperty(esv);", + "", + "var username = nodeState.get(\"username\");", + "", + "var data = {", + " jwtType:\"SIGNED\",", + " jwsAlgorithm: \"HS256\",", + " issuer: iss,", + " subject: username,", + " audience: aud,", + " type: \"JWT\",", + " validityMinutes: validity,", + " signingKey: signingkey", + "};", + "", + "var jwt = jwtAssertion.generateJwt(data);", + "", + "if (jwt !== null && jwt.length > 0) {", + " nodeState.putShared(\"assertionJwt\" , jwt);", + " action.goTo(\"True\");", + "} else {", + " action.goTo(\"False\");", + "}" + ], + "serviceName": "e5ad0110c8ee4dafaae983003cd05d4a", + "tags": [ + "Utilities", + "utilities" + ] + }, + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback" + }, + "required": true, + "title": "Callback", + "type": "STRING" + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING" + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING" + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \n\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \"Hello World!\" }. \n\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\"\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT" + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING" + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING" + } + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " OUTCOME: 'outcome'", + "};", + "", + "var CALLBACKS = {", + "\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\",", + "\tCHOICE_CALLBACK: \"CHOICE_CALLBACK\",", + "\tCONFIRMATION_CALLBACK: \"CONFIRMATION_CALLBACK\",", + "\tCONSENT_MAPPING_CALLBACK: \"CONSENT_MAPPING_CALLBACK\",", + "\tDEVICE_PROFILE_CALLBACK: \"DEVICE_PROFILE_CALLBACK\",", + "\tHIDDEN_VALUE_CALLBACK: \"HIDDEN_VALUE_CALLBACK\",", + "\tHTTP_CALLBACK: \"HTTP_CALLBACK\",", + "\tIDP_CALLBACK: \"IDP_CALLBACK\",", + "\tKBA_CREATE_CALLBACK: \"KBA_CREATE_CALLBACK\",", + "\tLANGUAGE_CALLBACK: \"LANGUAGE_CALLBACK\",", + "\tMETADATA_CALLBACK: \"METADATA_CALLBACK\",", + "\tNAME_CALLBACK: \"NAME_CALLBACK\",", + "\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \"NUMBER_ATTRIBUTE_INPUT_CALLBACK\",", + "\tPASSWORD_CALLBACK: \"PASSWORD_CALLBACK\",", + "\tPOLLING_WAIT_CALLBACK: \"POLLING_WAIT_CALLBACK\",", + " REDIRECT_CALLBACK: \"REDIRECT_CALLBACK\",", + "\tSCRIPT_TEXT_OUTPUT_CALLBACK: \"SCRIPT_TEXT_OUTPUT_CALLBACK\",", + "\tSELECT_IDP_CALLBACK: \"SELECT_IDP_CALLBACK\",", + "\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \"STRING_ATTRIBUTE_INPUT_CALLBACK\",", + "\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \"SUSPENDED_TEXT_OUTPUT_CALLBACK\",", + "\tTERMS_AND_CONDITIONS_CALLBACK: \"TERMS_AND_CONDITIONS_CALLBACK\",", + "\tTEXT_INPUT_CALLBACK: \"TEXT_INPUT_CALLBACK\",", + "\tTEXT_OUTPUT_CALLBACK: \"TEXT_OUTPUT_CALLBACK\",", + "\tVALIDATED_PASSWORD_CALLBACK: \"VALIDATED_PASSWORD_CALLBACK\",", + "\tVALIDATED_USERNAME_CALLBACK: \"VALIDATED_USERNAME_CALLBACK\",", + "\tX509_CERTIFICATE_CALLBACK: \"X509_CERTIFICATE_CALLBACK\"", + "}", + "", + "function isStringPresent(value) {", + " return value;", + "}", + "", + "function getString(value) {", + " return value || '';", + "}", + "", + "function isArrayPresent(value) {", + " return value;", + "}", + "", + "function getArray(value) {", + " return value ? JSON.parse(value) : [];", + "}", + "", + "function isObjectPresent(value) {", + " return value;", + "}", + "", + "function getObject(value) {", + " return value ? JSON.parse(value) : {};", + "}", + "", + "function isIntPresent(value) {", + " return value;", + "}", + "", + "function getInt(value) {", + " return value ? parseInt(value) : 0;", + "}", + "", + "function isDoublePresent(value) {", + " return value;", + "}", + "", + "function getDouble(value) {", + " return value ? parseFloat(value) : 0.0;", + "}", + "", + "function isBooleanPresent(value) {", + " return value;", + "}", + "", + "function getBoolean(value) {", + " return value ? value.toLowerCase() === 'true' : false;", + "}", + "", + "function setProperty(value) {", + " if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);", + " if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);", + " if (properties.objectSharedProperty) {", + " var attributes = {};", + " attributes[properties.objectSharedProperty] = value;", + " nodeState.mergeShared({", + " objectAttributes: attributes", + " });", + " }", + " if (properties.objectTransientProperty) {", + " var attributes = {};", + " attributes[properties.objectTransientProperty] = value;", + " nodeState.mergeTransient({", + " objectAttributes: attributes", + " });", + " }", + "}", + "", + "function booleanAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getBoolean(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function choiceCallback() {", + " var prompt = getString(properties.options.prompt);", + " var choices = getArray(properties.options.choices);", + " var defaultChoice = getInt(properties.options.defaultChoice);", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);", + "}", + "", + "function confirmationCallback() {", + " var prompt = getString(properties.options.prompt);", + " var messageType = getInt(properties.options.messageType);", + " var options = getArray(properties.options.options);", + " var optionType = getInt(properties.options.optionType);", + " var defaultOption = getInt(properties.options.defaultOption);", + " if (isStringPresent(properties.options.prompt)) {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);", + " }", + " } else {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(messageType, options, defaultOption);", + " }", + " }", + "}", + "", + "function consentMappingCallback() {", + " var config = getObject(properties.options.config);", + " var message = getString(properties.options.message);", + " var isRequired = getBoolean(properties.options.isRequired);", + " var name = getString(properties.options.name);", + " var displayName = getString(properties.options.displayName);", + " var icon = getString(properties.options.icon);", + " var accessLevel = getString(properties.options.accessLevel);", + " var titles = getArray(properties.options.titles);", + " if (isObjectPresent(properties.options.prompt)) {", + " callbacksBuilder.consentMappingCallback(config, message, isRequired);", + " } else {", + " callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);", + " }", + "}", + "", + "function deviceProfileCallback() {", + " var metadata = getBoolean(properties.options.metadata);", + " var location = getBoolean(properties.options.location);", + " var message = getString(properties.options.message);", + " callbacksBuilder.deviceProfileCallback(metadata, location, message);", + "}", + "", + "function hiddenValueCallback() {", + " var id = getString(properties.options.id);", + " var value = getString(properties.options.value);", + " callbacksBuilder.hiddenValueCallback(id, value);", + "}", + "", + "function httpCallback() {", + " var authorizationHeader = getString(properties.options.authorizationHeader);", + " var negotiationHeader = getString(properties.options.negotiationHeader);", + " var authRHeader = getString(properties.options.authRHeader);", + " var negoName = getString(properties.options.negoName);", + " var negoValue = getString(properties.options.negoValue);", + " if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {", + " var errorCode = getString(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);", + " } else {", + " var errorCode = getInt(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);", + " }", + "}", + "", + "function idPCallback() {", + " var provider = getString(properties.options.provider);", + " var clientId = getString(properties.options.clientId);", + " var redirectUri = getString(properties.options.redirectUri);", + " var scope = getArray(properties.options.scope);", + " var nonce = getString(properties.options.nonce);", + " var request = getString(properties.options.request);", + " var requestUri = getString(properties.options.requestUri);", + " var acrValues = getArray(properties.options.acrValues);", + " var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);", + " var token = getString(properties.options.token);", + " var tokenType = getString(properties.options.tokenType);", + " if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);", + " } else {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);", + " }", + "}", + "", + "function kbaCreateCallback() {", + " var prompt = getString(properties.options.prompt);", + " var predefinedQuestions = getArray(properties.options.predefinedQuestions);", + " var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);", + " callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);", + "}", + "", + "function languageCallback() {", + " var language = getString(properties.options.language);", + " var country = getString(properties.options.country);", + " callbacksBuilder.languageCallback(language, country);", + "}", + "", + "function metadataCallback() {", + " var outputValue = getObject(properties.options.outputValue);", + " callbacksBuilder.metadataCallback(outputValue);", + "}", + "", + "function nameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultName = getString(properties.options.defaultName);", + " if (isStringPresent(properties.options.defaultName)) {", + " callbacksBuilder.nameCallback(prompt, defaultName);", + " } else {", + " callbacksBuilder.nameCallback(prompt);", + " }", + "}", + "", + "function numberAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getDouble(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function passwordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " callbacksBuilder.passwordCallback(prompt, echoOn);", + "}", + "", + "function pollingWaitCallback() {", + " var waitTime = getString(properties.options.waitTime);", + " var message = getString(properties.options.message);", + " callbacksBuilder.pollingWaitCallback(waitTime, message);", + "}", + "", + "function redirectCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function scriptTextOutputCallback() {", + " var message = getString(properties.options.message);", + " callbacksBuilder.scriptTextOutputCallback(message);", + "}", + "", + "function selectIdPCallback() {", + " var providers = getObject(properties.options.providers);", + " callbacksBuilder.selectIdPCallback(providers);", + "}", + "", + "function stringAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getString(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function suspendedTextOutputCallback() {", + " var messageType = getInt(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.suspendedTextOutputCallback(messageType, message);", + "}", + "", + "function termsAndConditionsCallback() {", + " var version = getString(properties.options.version);", + " var terms = getString(properties.options.terms);", + " var createDate = getString(properties.options.createDate);", + " callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);", + "}", + "", + "function textInputCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultText = getString(properties.options.defaultText);", + " if (isStringPresent(properties.options.defaultText)) {", + " callbacksBuilder.textInputCallback(prompt, defaultText);", + " } else {", + " callbacksBuilder.textInputCallback(prompt);", + " }", + "}", + "", + "function textOutputCallback() {", + " var messageType = getString(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.textOutputCallback(messageType, message);", + "}", + "", + "function validatedPasswordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);", + " }", + "}", + "", + "function validatedUsernameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);", + " }", + "}", + "", + "function x509CertificateCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function getBooleanAttributeInputCallback() {", + " setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));", + "}", + "", + "function getChoiceCallback() {", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " var selections = callbacks.getChoiceCallbacks().get(0);", + " setProperty(multipleSelectionsAllowed ? selections : selections[0]);", + "}", + "", + "function getConfirmationCallback() {", + " setProperty(callbacks.getConfirmationCallbacks().get(0));", + "}", + "", + "function getConsentMappingCallback() {", + " setProperty(callbacks.getConsentMappingCallbacks().get(0));", + "}", + "", + "function getDeviceProfileCallback() {", + " setProperty(callbacks.getDeviceProfileCallbacks().get(0));", + "}", + "", + "function getHiddenValueCallback() {", + " var id = getString(properties.options.id);", + " setProperty(callbacks.getHiddenValueCallbacks().get(id));", + "}", + "", + "function getHttpCallback() {", + " setProperty(callbacks.getHttpCallbacks().get(0));", + "}", + "", + "function getIdPCallback() {", + " setProperty(callbacks.getIdpCallbacks().get(0));", + "}", + "", + "function getKbaCreateCallback() {", + " setProperty(callbacks.getKbaCreateCallbacks().get(0));", + "}", + "", + "function getLanguageCallback() {", + " setProperty(callbacks.getLanguageCallbacks().get(0));", + "}", + "", + "function getNameCallback() {", + " setProperty(callbacks.getNameCallbacks().get(0));", + "}", + "", + "function getNumberAttributeInputCallback() {", + " setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));", + "}", + "", + "function getPasswordCallback() {", + " setProperty(callbacks.getPasswordCallbacks().get(0));", + "}", + "", + "function getSelectIdPCallback() {", + " setProperty(callbacks.getSelectIdPCallbacks().get(0));", + "}", + "", + "function getStringAttributeInputCallback() {", + " setProperty(callbacks.getStringAttributeInputCallbacks().get(0));", + "}", + "", + "function getTermsAndConditionsCallback() {", + " setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));", + "}", + "", + "function getTextInputCallback() {", + " setProperty(callbacks.getTextInputCallbacks().get(0));", + "}", + "", + "function getValidatedPasswordCallback() {", + " setProperty(callbacks.getValidatedPasswordCallbacks().get(0));", + "}", + "", + "function getValidatedUsernameCallback() {", + " setProperty(callbacks.getValidatedUsernameCallbacks().get(0));", + "}", + "", + "function getX509CertificateCallback() {", + " setProperty(callbacks.getX509CertificateCallbacks().get(0));", + "}", + "", + "function main() {", + " if (!callbacks.isEmpty()) {", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;", + " default: break;", + " }", + " action.goTo(SCRIPT_OUTCOMES.OUTCOME);", + " return;", + " }", + "", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: idPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;", + " case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: nameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;", + " case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;", + " case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;", + " case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;", + " case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;", + " case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;", + " default: throw new Error('Unknown Callback'); // Should never reach this case", + " }", + "}", + "", + "main();", + "" + ], + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities" + ] + }, + "session-1": { + "_id": "session-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session AM", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": [ + "var SCRIPT_OUTCOMES = {", + " TRUE: 'True',", + " FALSE: 'False'", + "}", + "", + "function main() {", + " action.goTo(typeof existingSession === \"undefined\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);", + "}", + "", + "main();", + "" + ], + "serviceName": "session", + "tags": [ + "utilities" + ] + } + }, "realm": { "L2FscGhh": { "_id": "L2FscGhh", diff --git a/test/e2e/exports/all/allCustomNodes.nodeTypes.json b/test/e2e/exports/all/allCustomNodes.nodeTypes.json new file mode 100644 index 000000000..17f4768aa --- /dev/null +++ b/test/e2e/exports/all/allCustomNodes.nodeTypes.json @@ -0,0 +1,1003 @@ +{ + "meta": { + "exportDate": "2025-12-17T20:36:19.377Z", + "exportTool": "frodo", + "exportToolVersion": "v3.3.3 [v20.18.0]", + "origin": "https://openam-frodo-dev.forgeblocks.com/am", + "originAmVersion": "8.1.0" + }, + "nodeTypes": { + "8ab9f1aad4b4460a9c45d15fb148e221-1": { + "_id": "8ab9f1aad4b4460a9c45d15fb148e221-1", + "description": "Debug node that displays the shared and transient state of the journey for debugging purposes.", + "displayName": "Display State", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "displayFormat": { + "defaultValue": "TABLE", + "description": "The format in which to display the states.", + "multivalued": false, + "options": { + "JSON": "Raw JSON", + "TABLE": "HTML Table" + }, + "required": true, + "title": "Display Format", + "type": "STRING" + } + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " OUTCOME: \"outcome\"", + "};", + "", + "function main() {", + " if (!callbacks.isEmpty()) {", + " action.goTo(SCRIPT_OUTCOMES.OUTCOME);", + " return;", + " }", + " var keySet = nodeState.keys(); // Java Set", + " var keys = Array.from(keySet); // Make it into JavaScript array", + " debugState = {};", + " for (var i in keys) {", + " var k = new String(keys[i]);", + " var item = nodeState.get(k);", + " if (typeof item === \"object\") {", + " debugState[k] = nodeState.getObject(k);", + " } else {", + " debugState[k] = nodeState.get(k);", + " }", + " }", + " if (properties.displayFormat === \"JSON\") {", + " callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);", + " return;", + " }", + " callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);", + "}", + "", + "main();", + "" + ], + "serviceName": "8ab9f1aad4b4460a9c45d15fb148e221", + "tags": [ + "debug", + "testing" + ] + }, + "c15e2efb3deb4d4ea338c74a6440b69f-1": { + "_id": "c15e2efb3deb4d4ea338c74a6440b69f-1", + "description": "Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \"c\".", + "displayName": "Vector ALU", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "Success" + ], + "outputs": [ + "c" + ], + "properties": { + "a": { + "defaultValue": [ + 1, + 2, + 3 + ], + "description": "Left vector operand", + "multivalued": true, + "required": true, + "title": "A", + "type": "NUMBER" + }, + "b": { + "defaultValue": [ + 4, + 5, + 6 + ], + "description": "Right vector operand", + "multivalued": true, + "required": true, + "title": "B", + "type": "NUMBER" + }, + "operator": { + "defaultValue": "DOT", + "description": "The binary operation to perform on the vectors.", + "multivalued": false, + "options": { + "ADD": "+", + "CROSS": "X", + "DOT": ".", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " SUCCESS: 'Success'", + "};", + "", + "var OPERATORS = {", + " ADD: \"ADD\",", + " SUBTRACT: \"SUBTRACT\",", + " DOT: \"DOT\",", + " CROSS: \"CROSS\"", + "}", + "", + "function add(a, b) {", + " return a.map((v, i) => v + b[i]);", + "}", + "", + "function subtract(a, b) {", + " return a.map((v, i) => v - b[i]);", + "}", + "", + "function dot(a, b) {", + " return a.reduce((sum, v, i) => sum + v * b[i], 0);", + "}", + "", + "function cross(a, b) {", + " return [", + " a[1] * b[2] - a[2] * b[1],", + " a[2] * b[0] - a[0] * b[2],", + " a[0] * b[1] - a[1] * b[0]", + " ];", + "}", + "", + "function main() {", + " if (properties.a.length !== properties.b.length) throw new Error(\"Vectors not the same dimension.\");", + " switch (properties.operator) {", + " case OPERATORS.ADD:", + " nodeState.putShared(\"c\", add(properties.a, properties.b));", + " break;", + " case OPERATORS.SUBTRACT:", + " nodeState.putShared(\"c\", subtract(properties.a, properties.b));", + " break;", + " case OPERATORS.DOT:", + " nodeState.putShared(\"c\", dot(properties.a, properties.b));", + " break;", + " case OPERATORS.CROSS:", + " if (properties.a.length !== 3) throw new Error(\"Vectors not dimension 3 for cross product\");", + " nodeState.putShared(\"c\", cross(properties.a, properties.b));", + " break;", + " default: throw new Error(\"Unknown operator.\");", + " }", + " action.goTo(SCRIPT_OUTCOMES.SUCCESS);", + "}", + "", + "main();", + "" + ], + "serviceName": "c15e2efb3deb4d4ea338c74a6440b69f", + "tags": [ + "math", + "vector", + "utilities" + ] + }, + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": [ + "var SCRIPT_OUTCOMES = {", + " TRUE: 'True',", + " FALSE: 'False'", + "}", + "", + "function main() {", + " action.goTo(typeof existingSession === \"undefined\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);", + "}", + "", + "main();", + "" + ], + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities" + ] + }, + "c6063fb2f5dc42dd9772bedc93898bd8-1": { + "_id": "c6063fb2f5dc42dd9772bedc93898bd8-1", + "description": "Simple ALU that performs basic binary math operations. Expects an \"x\" and \"y\" value on the shared state, and will produce a new \"z\" value on the shared state as output.", + "displayName": "ALU", + "errorOutcome": true, + "inputs": [ + "x", + "y" + ], + "outcomes": [ + "Success" + ], + "outputs": [ + "z" + ], + "properties": { + "operator": { + "defaultValue": "ADD", + "description": "The operation to perform.", + "multivalued": false, + "options": { + "ADD": "+", + "DIVIDE": "/", + "MULTIPLY": "*", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " SUCCESS: 'Success'", + "};", + "", + "var OPERATORS = {", + " ADD: \"ADD\",", + " SUBTRACT: \"SUBTRACT\",", + " MULTIPLY: \"MULTIPLY\",", + " DIVIDE: \"DIVIDE\"", + "}", + "", + "function main() {", + " var a = Number(properties.a);", + " var b = Number(properties.b);", + " switch (properties.operator) {", + " case OPERATORS.ADD:", + " nodeState.putShared(\"z\", a + b);", + " break;", + " case OPERATORS.SUBTRACT:", + " nodeState.putShared(\"z\", a - b);", + " break;", + " case OPERATORS.MULTIPLY:", + " nodeState.putShared(\"z\", a * b);", + " break;", + " case OPERATORS.DIVIDE:", + " if (b == 0) throw new Error(\"Cannot divide by 0\");", + " nodeState.putShared(\"z\", a / b);", + " break;", + " default: throw new Error(\"Unknown operator.\");", + " }", + " action.goTo(SCRIPT_OUTCOMES.SUCCESS);", + "}", + "", + "main();", + "" + ], + "serviceName": "c6063fb2f5dc42dd9772bedc93898bd8", + "tags": [ + "math", + "utilities" + ] + }, + "e5ad0110c8ee4dafaae983003cd05d4a-1": { + "_id": "e5ad0110c8ee4dafaae983003cd05d4a-1", + "description": "Generate a signed JWT using the HMAC SHA-256 algorithm.", + "displayName": "Generate JWT", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": { + "audience": { + "description": "The audience (aud) claim", + "multivalued": false, + "required": true, + "title": "Audience", + "type": "STRING" + }, + "issuer": { + "description": "The issuer (iss) claim", + "multivalued": false, + "required": true, + "title": "Issuer", + "type": "STRING" + }, + "signingkey": { + "defaultValue": "esv.signing.key", + "description": "The secret label for the HMAC signing key", + "multivalued": false, + "required": true, + "title": "HMAC Signing Key", + "type": "STRING" + }, + "validity": { + "defaultValue": 5, + "description": "", + "multivalued": false, + "required": true, + "title": "Validity (minutes)", + "type": "NUMBER" + } + }, + "script": [ + "var aud = properties.audience;", + "var iss = properties.issuer;", + "var validity = properties.validity;", + "var esv = properties.signingkey;", + "", + "var signingkey = systemEnv.getProperty(esv);", + "", + "var username = nodeState.get(\"username\");", + "", + "var data = {", + " jwtType:\"SIGNED\",", + " jwsAlgorithm: \"HS256\",", + " issuer: iss,", + " subject: username,", + " audience: aud,", + " type: \"JWT\",", + " validityMinutes: validity,", + " signingKey: signingkey", + "};", + "", + "var jwt = jwtAssertion.generateJwt(data);", + "", + "if (jwt !== null && jwt.length > 0) {", + " nodeState.putShared(\"assertionJwt\" , jwt);", + " action.goTo(\"True\");", + "} else {", + " action.goTo(\"False\");", + "}" + ], + "serviceName": "e5ad0110c8ee4dafaae983003cd05d4a", + "tags": [ + "Utilities", + "utilities" + ] + }, + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback" + }, + "required": true, + "title": "Callback", + "type": "STRING" + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING" + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING" + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \n\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \"Hello World!\" }. \n\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\"\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT" + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING" + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING" + } + }, + "script": [ + "var SCRIPT_OUTCOMES = {", + " OUTCOME: 'outcome'", + "};", + "", + "var CALLBACKS = {", + "\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\",", + "\tCHOICE_CALLBACK: \"CHOICE_CALLBACK\",", + "\tCONFIRMATION_CALLBACK: \"CONFIRMATION_CALLBACK\",", + "\tCONSENT_MAPPING_CALLBACK: \"CONSENT_MAPPING_CALLBACK\",", + "\tDEVICE_PROFILE_CALLBACK: \"DEVICE_PROFILE_CALLBACK\",", + "\tHIDDEN_VALUE_CALLBACK: \"HIDDEN_VALUE_CALLBACK\",", + "\tHTTP_CALLBACK: \"HTTP_CALLBACK\",", + "\tIDP_CALLBACK: \"IDP_CALLBACK\",", + "\tKBA_CREATE_CALLBACK: \"KBA_CREATE_CALLBACK\",", + "\tLANGUAGE_CALLBACK: \"LANGUAGE_CALLBACK\",", + "\tMETADATA_CALLBACK: \"METADATA_CALLBACK\",", + "\tNAME_CALLBACK: \"NAME_CALLBACK\",", + "\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \"NUMBER_ATTRIBUTE_INPUT_CALLBACK\",", + "\tPASSWORD_CALLBACK: \"PASSWORD_CALLBACK\",", + "\tPOLLING_WAIT_CALLBACK: \"POLLING_WAIT_CALLBACK\",", + " REDIRECT_CALLBACK: \"REDIRECT_CALLBACK\",", + "\tSCRIPT_TEXT_OUTPUT_CALLBACK: \"SCRIPT_TEXT_OUTPUT_CALLBACK\",", + "\tSELECT_IDP_CALLBACK: \"SELECT_IDP_CALLBACK\",", + "\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \"STRING_ATTRIBUTE_INPUT_CALLBACK\",", + "\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \"SUSPENDED_TEXT_OUTPUT_CALLBACK\",", + "\tTERMS_AND_CONDITIONS_CALLBACK: \"TERMS_AND_CONDITIONS_CALLBACK\",", + "\tTEXT_INPUT_CALLBACK: \"TEXT_INPUT_CALLBACK\",", + "\tTEXT_OUTPUT_CALLBACK: \"TEXT_OUTPUT_CALLBACK\",", + "\tVALIDATED_PASSWORD_CALLBACK: \"VALIDATED_PASSWORD_CALLBACK\",", + "\tVALIDATED_USERNAME_CALLBACK: \"VALIDATED_USERNAME_CALLBACK\",", + "\tX509_CERTIFICATE_CALLBACK: \"X509_CERTIFICATE_CALLBACK\"", + "}", + "", + "function isStringPresent(value) {", + " return value;", + "}", + "", + "function getString(value) {", + " return value || '';", + "}", + "", + "function isArrayPresent(value) {", + " return value;", + "}", + "", + "function getArray(value) {", + " return value ? JSON.parse(value) : [];", + "}", + "", + "function isObjectPresent(value) {", + " return value;", + "}", + "", + "function getObject(value) {", + " return value ? JSON.parse(value) : {};", + "}", + "", + "function isIntPresent(value) {", + " return value;", + "}", + "", + "function getInt(value) {", + " return value ? parseInt(value) : 0;", + "}", + "", + "function isDoublePresent(value) {", + " return value;", + "}", + "", + "function getDouble(value) {", + " return value ? parseFloat(value) : 0.0;", + "}", + "", + "function isBooleanPresent(value) {", + " return value;", + "}", + "", + "function getBoolean(value) {", + " return value ? value.toLowerCase() === 'true' : false;", + "}", + "", + "function setProperty(value) {", + " if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);", + " if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);", + " if (properties.objectSharedProperty) {", + " var attributes = {};", + " attributes[properties.objectSharedProperty] = value;", + " nodeState.mergeShared({", + " objectAttributes: attributes", + " });", + " }", + " if (properties.objectTransientProperty) {", + " var attributes = {};", + " attributes[properties.objectTransientProperty] = value;", + " nodeState.mergeTransient({", + " objectAttributes: attributes", + " });", + " }", + "}", + "", + "function booleanAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getBoolean(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function choiceCallback() {", + " var prompt = getString(properties.options.prompt);", + " var choices = getArray(properties.options.choices);", + " var defaultChoice = getInt(properties.options.defaultChoice);", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);", + "}", + "", + "function confirmationCallback() {", + " var prompt = getString(properties.options.prompt);", + " var messageType = getInt(properties.options.messageType);", + " var options = getArray(properties.options.options);", + " var optionType = getInt(properties.options.optionType);", + " var defaultOption = getInt(properties.options.defaultOption);", + " if (isStringPresent(properties.options.prompt)) {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);", + " }", + " } else {", + " if (isIntPresent(properties.options.optionType)) {", + " callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);", + " } else {", + " callbacksBuilder.confirmationCallback(messageType, options, defaultOption);", + " }", + " }", + "}", + "", + "function consentMappingCallback() {", + " var config = getObject(properties.options.config);", + " var message = getString(properties.options.message);", + " var isRequired = getBoolean(properties.options.isRequired);", + " var name = getString(properties.options.name);", + " var displayName = getString(properties.options.displayName);", + " var icon = getString(properties.options.icon);", + " var accessLevel = getString(properties.options.accessLevel);", + " var titles = getArray(properties.options.titles);", + " if (isObjectPresent(properties.options.prompt)) {", + " callbacksBuilder.consentMappingCallback(config, message, isRequired);", + " } else {", + " callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);", + " }", + "}", + "", + "function deviceProfileCallback() {", + " var metadata = getBoolean(properties.options.metadata);", + " var location = getBoolean(properties.options.location);", + " var message = getString(properties.options.message);", + " callbacksBuilder.deviceProfileCallback(metadata, location, message);", + "}", + "", + "function hiddenValueCallback() {", + " var id = getString(properties.options.id);", + " var value = getString(properties.options.value);", + " callbacksBuilder.hiddenValueCallback(id, value);", + "}", + "", + "function httpCallback() {", + " var authorizationHeader = getString(properties.options.authorizationHeader);", + " var negotiationHeader = getString(properties.options.negotiationHeader);", + " var authRHeader = getString(properties.options.authRHeader);", + " var negoName = getString(properties.options.negoName);", + " var negoValue = getString(properties.options.negoValue);", + " if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {", + " var errorCode = getString(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);", + " } else {", + " var errorCode = getInt(properties.options.errorCode);", + " callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);", + " }", + "}", + "", + "function idPCallback() {", + " var provider = getString(properties.options.provider);", + " var clientId = getString(properties.options.clientId);", + " var redirectUri = getString(properties.options.redirectUri);", + " var scope = getArray(properties.options.scope);", + " var nonce = getString(properties.options.nonce);", + " var request = getString(properties.options.request);", + " var requestUri = getString(properties.options.requestUri);", + " var acrValues = getArray(properties.options.acrValues);", + " var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);", + " var token = getString(properties.options.token);", + " var tokenType = getString(properties.options.tokenType);", + " if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);", + " } else {", + " callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);", + " }", + "}", + "", + "function kbaCreateCallback() {", + " var prompt = getString(properties.options.prompt);", + " var predefinedQuestions = getArray(properties.options.predefinedQuestions);", + " var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);", + " callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);", + "}", + "", + "function languageCallback() {", + " var language = getString(properties.options.language);", + " var country = getString(properties.options.country);", + " callbacksBuilder.languageCallback(language, country);", + "}", + "", + "function metadataCallback() {", + " var outputValue = getObject(properties.options.outputValue);", + " callbacksBuilder.metadataCallback(outputValue);", + "}", + "", + "function nameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultName = getString(properties.options.defaultName);", + " if (isStringPresent(properties.options.defaultName)) {", + " callbacksBuilder.nameCallback(prompt, defaultName);", + " } else {", + " callbacksBuilder.nameCallback(prompt);", + " }", + "}", + "", + "function numberAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getDouble(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function passwordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " callbacksBuilder.passwordCallback(prompt, echoOn);", + "}", + "", + "function pollingWaitCallback() {", + " var waitTime = getString(properties.options.waitTime);", + " var message = getString(properties.options.message);", + " callbacksBuilder.pollingWaitCallback(waitTime, message);", + "}", + "", + "function redirectCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function scriptTextOutputCallback() {", + " var message = getString(properties.options.message);", + " callbacksBuilder.scriptTextOutputCallback(message);", + "}", + "", + "function selectIdPCallback() {", + " var providers = getObject(properties.options.providers);", + " callbacksBuilder.selectIdPCallback(providers);", + "}", + "", + "function stringAttributeInputCallback() {", + " var name = getString(properties.options.name);", + " var prompt = getString(properties.options.prompt);", + " var value = getString(properties.options.value);", + " var required = getBoolean(properties.options.required);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {", + " if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);", + " }", + " } else if (isArrayPresent(failedPolicies)) {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);", + " } else {", + " callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);", + " }", + "}", + "", + "function suspendedTextOutputCallback() {", + " var messageType = getInt(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.suspendedTextOutputCallback(messageType, message);", + "}", + "", + "function termsAndConditionsCallback() {", + " var version = getString(properties.options.version);", + " var terms = getString(properties.options.terms);", + " var createDate = getString(properties.options.createDate);", + " callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);", + "}", + "", + "function textInputCallback() {", + " var prompt = getString(properties.options.prompt);", + " var defaultText = getString(properties.options.defaultText);", + " if (isStringPresent(properties.options.defaultText)) {", + " callbacksBuilder.textInputCallback(prompt, defaultText);", + " } else {", + " callbacksBuilder.textInputCallback(prompt);", + " }", + "}", + "", + "function textOutputCallback() {", + " var messageType = getString(properties.options.messageType);", + " var message = getString(properties.options.message);", + " callbacksBuilder.textOutputCallback(messageType, message);", + "}", + "", + "function validatedPasswordCallback() {", + " var prompt = getString(properties.options.prompt);", + " var echoOn = getBoolean(properties.options.echoOn);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);", + " }", + "}", + "", + "function validatedUsernameCallback() {", + " var prompt = getString(properties.options.prompt);", + " var policies = getObject(properties.options.policies);", + " var validateOnly = getBoolean(properties.options.validateOnly);", + " var failedPolicies = getArray(properties.options.failedPolicies);", + " if (isArrayPresent(properties.options.failedPolicies)) {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);", + " } else {", + " callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);", + " }", + "}", + "", + "function x509CertificateCallback() {", + " throw new Error('Not Implemented');", + "}", + "", + "function getBooleanAttributeInputCallback() {", + " setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));", + "}", + "", + "function getChoiceCallback() {", + " var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);", + " var selections = callbacks.getChoiceCallbacks().get(0);", + " setProperty(multipleSelectionsAllowed ? selections : selections[0]);", + "}", + "", + "function getConfirmationCallback() {", + " setProperty(callbacks.getConfirmationCallbacks().get(0));", + "}", + "", + "function getConsentMappingCallback() {", + " setProperty(callbacks.getConsentMappingCallbacks().get(0));", + "}", + "", + "function getDeviceProfileCallback() {", + " setProperty(callbacks.getDeviceProfileCallbacks().get(0));", + "}", + "", + "function getHiddenValueCallback() {", + " var id = getString(properties.options.id);", + " setProperty(callbacks.getHiddenValueCallbacks().get(id));", + "}", + "", + "function getHttpCallback() {", + " setProperty(callbacks.getHttpCallbacks().get(0));", + "}", + "", + "function getIdPCallback() {", + " setProperty(callbacks.getIdpCallbacks().get(0));", + "}", + "", + "function getKbaCreateCallback() {", + " setProperty(callbacks.getKbaCreateCallbacks().get(0));", + "}", + "", + "function getLanguageCallback() {", + " setProperty(callbacks.getLanguageCallbacks().get(0));", + "}", + "", + "function getNameCallback() {", + " setProperty(callbacks.getNameCallbacks().get(0));", + "}", + "", + "function getNumberAttributeInputCallback() {", + " setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));", + "}", + "", + "function getPasswordCallback() {", + " setProperty(callbacks.getPasswordCallbacks().get(0));", + "}", + "", + "function getSelectIdPCallback() {", + " setProperty(callbacks.getSelectIdPCallbacks().get(0));", + "}", + "", + "function getStringAttributeInputCallback() {", + " setProperty(callbacks.getStringAttributeInputCallbacks().get(0));", + "}", + "", + "function getTermsAndConditionsCallback() {", + " setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));", + "}", + "", + "function getTextInputCallback() {", + " setProperty(callbacks.getTextInputCallbacks().get(0));", + "}", + "", + "function getValidatedPasswordCallback() {", + " setProperty(callbacks.getValidatedPasswordCallbacks().get(0));", + "}", + "", + "function getValidatedUsernameCallback() {", + " setProperty(callbacks.getValidatedUsernameCallbacks().get(0));", + "}", + "", + "function getX509CertificateCallback() {", + " setProperty(callbacks.getX509CertificateCallbacks().get(0));", + "}", + "", + "function main() {", + " if (!callbacks.isEmpty()) {", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;", + " default: break;", + " }", + " action.goTo(SCRIPT_OUTCOMES.OUTCOME);", + " return;", + " }", + "", + " switch (properties.callback) {", + " case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;", + " case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;", + " case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;", + " case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;", + " case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;", + " case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;", + " case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;", + " case CALLBACKS.IDP_CALLBACK: idPCallback(); break;", + " case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;", + " case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;", + " case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;", + " case CALLBACKS.NAME_CALLBACK: nameCallback(); break;", + " case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;", + " case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;", + " case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;", + " case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;", + " case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;", + " case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;", + " case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;", + " case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;", + " case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;", + " case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;", + " case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;", + " case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;", + " case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;", + " case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;", + " default: throw new Error('Unknown Callback'); // Should never reach this case", + " }", + "}", + "", + "main();", + "" + ], + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities" + ] + }, + "session-1": { + "_id": "session-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session AM", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": [ + "var SCRIPT_OUTCOMES = {", + " TRUE: 'True',", + " FALSE: 'False'", + "}", + "", + "function main() {", + " action.goTo(typeof existingSession === \"undefined\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);", + "}", + "", + "main();", + "" + ], + "serviceName": "session", + "tags": [ + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/ALU.nodeTypes.js b/test/e2e/exports/full-export-separate/global/nodeTypes/ALU.nodeTypes.js new file mode 100644 index 000000000..14635619f --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/ALU.nodeTypes.js @@ -0,0 +1,34 @@ +var SCRIPT_OUTCOMES = { + SUCCESS: 'Success' +}; + +var OPERATORS = { + ADD: "ADD", + SUBTRACT: "SUBTRACT", + MULTIPLY: "MULTIPLY", + DIVIDE: "DIVIDE" +} + +function main() { + var a = Number(properties.a); + var b = Number(properties.b); + switch (properties.operator) { + case OPERATORS.ADD: + nodeState.putShared("z", a + b); + break; + case OPERATORS.SUBTRACT: + nodeState.putShared("z", a - b); + break; + case OPERATORS.MULTIPLY: + nodeState.putShared("z", a * b); + break; + case OPERATORS.DIVIDE: + if (b == 0) throw new Error("Cannot divide by 0"); + nodeState.putShared("z", a / b); + break; + default: throw new Error("Unknown operator."); + } + action.goTo(SCRIPT_OUTCOMES.SUCCESS); +} + +main(); diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/ALU.nodeTypes.json b/test/e2e/exports/full-export-separate/global/nodeTypes/ALU.nodeTypes.json new file mode 100644 index 000000000..e5239980e --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/ALU.nodeTypes.json @@ -0,0 +1,42 @@ +{ + "nodeTypes": { + "c6063fb2f5dc42dd9772bedc93898bd8-1": { + "_id": "c6063fb2f5dc42dd9772bedc93898bd8-1", + "description": "Simple ALU that performs basic binary math operations. Expects an \"x\" and \"y\" value on the shared state, and will produce a new \"z\" value on the shared state as output.", + "displayName": "ALU", + "errorOutcome": true, + "inputs": [ + "x", + "y" + ], + "outcomes": [ + "Success" + ], + "outputs": [ + "z" + ], + "properties": { + "operator": { + "defaultValue": "ADD", + "description": "The operation to perform.", + "multivalued": false, + "options": { + "ADD": "+", + "DIVIDE": "/", + "MULTIPLY": "*", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": "file://ALU.nodeTypes.js", + "serviceName": "c6063fb2f5dc42dd9772bedc93898bd8", + "tags": [ + "math", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/Display-Callback.nodeTypes.js b/test/e2e/exports/full-export-separate/global/nodeTypes/Display-Callback.nodeTypes.js new file mode 100644 index 000000000..6b682c6c1 --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/Display-Callback.nodeTypes.js @@ -0,0 +1,511 @@ +var SCRIPT_OUTCOMES = { + OUTCOME: 'outcome' +}; + +var CALLBACKS = { + BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK", + CHOICE_CALLBACK: "CHOICE_CALLBACK", + CONFIRMATION_CALLBACK: "CONFIRMATION_CALLBACK", + CONSENT_MAPPING_CALLBACK: "CONSENT_MAPPING_CALLBACK", + DEVICE_PROFILE_CALLBACK: "DEVICE_PROFILE_CALLBACK", + HIDDEN_VALUE_CALLBACK: "HIDDEN_VALUE_CALLBACK", + HTTP_CALLBACK: "HTTP_CALLBACK", + IDP_CALLBACK: "IDP_CALLBACK", + KBA_CREATE_CALLBACK: "KBA_CREATE_CALLBACK", + LANGUAGE_CALLBACK: "LANGUAGE_CALLBACK", + METADATA_CALLBACK: "METADATA_CALLBACK", + NAME_CALLBACK: "NAME_CALLBACK", + NUMBER_ATTRIBUTE_INPUT_CALLBACK: "NUMBER_ATTRIBUTE_INPUT_CALLBACK", + PASSWORD_CALLBACK: "PASSWORD_CALLBACK", + POLLING_WAIT_CALLBACK: "POLLING_WAIT_CALLBACK", + REDIRECT_CALLBACK: "REDIRECT_CALLBACK", + SCRIPT_TEXT_OUTPUT_CALLBACK: "SCRIPT_TEXT_OUTPUT_CALLBACK", + SELECT_IDP_CALLBACK: "SELECT_IDP_CALLBACK", + STRING_ATTRIBUTE_INPUT_CALLBACK: "STRING_ATTRIBUTE_INPUT_CALLBACK", + SUSPENDED_TEXT_OUTPUT_CALLBACK: "SUSPENDED_TEXT_OUTPUT_CALLBACK", + TERMS_AND_CONDITIONS_CALLBACK: "TERMS_AND_CONDITIONS_CALLBACK", + TEXT_INPUT_CALLBACK: "TEXT_INPUT_CALLBACK", + TEXT_OUTPUT_CALLBACK: "TEXT_OUTPUT_CALLBACK", + VALIDATED_PASSWORD_CALLBACK: "VALIDATED_PASSWORD_CALLBACK", + VALIDATED_USERNAME_CALLBACK: "VALIDATED_USERNAME_CALLBACK", + X509_CERTIFICATE_CALLBACK: "X509_CERTIFICATE_CALLBACK" +} + +function isStringPresent(value) { + return value; +} + +function getString(value) { + return value || ''; +} + +function isArrayPresent(value) { + return value; +} + +function getArray(value) { + return value ? JSON.parse(value) : []; +} + +function isObjectPresent(value) { + return value; +} + +function getObject(value) { + return value ? JSON.parse(value) : {}; +} + +function isIntPresent(value) { + return value; +} + +function getInt(value) { + return value ? parseInt(value) : 0; +} + +function isDoublePresent(value) { + return value; +} + +function getDouble(value) { + return value ? parseFloat(value) : 0.0; +} + +function isBooleanPresent(value) { + return value; +} + +function getBoolean(value) { + return value ? value.toLowerCase() === 'true' : false; +} + +function setProperty(value) { + if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value); + if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value); + if (properties.objectSharedProperty) { + var attributes = {}; + attributes[properties.objectSharedProperty] = value; + nodeState.mergeShared({ + objectAttributes: attributes + }); + } + if (properties.objectTransientProperty) { + var attributes = {}; + attributes[properties.objectTransientProperty] = value; + nodeState.mergeTransient({ + objectAttributes: attributes + }); + } +} + +function booleanAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getBoolean(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required); + } +} + +function choiceCallback() { + var prompt = getString(properties.options.prompt); + var choices = getArray(properties.options.choices); + var defaultChoice = getInt(properties.options.defaultChoice); + var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed); + callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed); +} + +function confirmationCallback() { + var prompt = getString(properties.options.prompt); + var messageType = getInt(properties.options.messageType); + var options = getArray(properties.options.options); + var optionType = getInt(properties.options.optionType); + var defaultOption = getInt(properties.options.defaultOption); + if (isStringPresent(properties.options.prompt)) { + if (isIntPresent(properties.options.optionType)) { + callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption); + } else { + callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption); + } + } else { + if (isIntPresent(properties.options.optionType)) { + callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption); + } else { + callbacksBuilder.confirmationCallback(messageType, options, defaultOption); + } + } +} + +function consentMappingCallback() { + var config = getObject(properties.options.config); + var message = getString(properties.options.message); + var isRequired = getBoolean(properties.options.isRequired); + var name = getString(properties.options.name); + var displayName = getString(properties.options.displayName); + var icon = getString(properties.options.icon); + var accessLevel = getString(properties.options.accessLevel); + var titles = getArray(properties.options.titles); + if (isObjectPresent(properties.options.prompt)) { + callbacksBuilder.consentMappingCallback(config, message, isRequired); + } else { + callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired); + } +} + +function deviceProfileCallback() { + var metadata = getBoolean(properties.options.metadata); + var location = getBoolean(properties.options.location); + var message = getString(properties.options.message); + callbacksBuilder.deviceProfileCallback(metadata, location, message); +} + +function hiddenValueCallback() { + var id = getString(properties.options.id); + var value = getString(properties.options.value); + callbacksBuilder.hiddenValueCallback(id, value); +} + +function httpCallback() { + var authorizationHeader = getString(properties.options.authorizationHeader); + var negotiationHeader = getString(properties.options.negotiationHeader); + var authRHeader = getString(properties.options.authRHeader); + var negoName = getString(properties.options.negoName); + var negoValue = getString(properties.options.negoValue); + if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) { + var errorCode = getString(properties.options.errorCode); + callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode); + } else { + var errorCode = getInt(properties.options.errorCode); + callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode); + } +} + +function idPCallback() { + var provider = getString(properties.options.provider); + var clientId = getString(properties.options.clientId); + var redirectUri = getString(properties.options.redirectUri); + var scope = getArray(properties.options.scope); + var nonce = getString(properties.options.nonce); + var request = getString(properties.options.request); + var requestUri = getString(properties.options.requestUri); + var acrValues = getArray(properties.options.acrValues); + var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo); + var token = getString(properties.options.token); + var tokenType = getString(properties.options.tokenType); + if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) { + callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType); + } else { + callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo); + } +} + +function kbaCreateCallback() { + var prompt = getString(properties.options.prompt); + var predefinedQuestions = getArray(properties.options.predefinedQuestions); + var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions); + callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions); +} + +function languageCallback() { + var language = getString(properties.options.language); + var country = getString(properties.options.country); + callbacksBuilder.languageCallback(language, country); +} + +function metadataCallback() { + var outputValue = getObject(properties.options.outputValue); + callbacksBuilder.metadataCallback(outputValue); +} + +function nameCallback() { + var prompt = getString(properties.options.prompt); + var defaultName = getString(properties.options.defaultName); + if (isStringPresent(properties.options.defaultName)) { + callbacksBuilder.nameCallback(prompt, defaultName); + } else { + callbacksBuilder.nameCallback(prompt); + } +} + +function numberAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getDouble(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required); + } +} + +function passwordCallback() { + var prompt = getString(properties.options.prompt); + var echoOn = getBoolean(properties.options.echoOn); + callbacksBuilder.passwordCallback(prompt, echoOn); +} + +function pollingWaitCallback() { + var waitTime = getString(properties.options.waitTime); + var message = getString(properties.options.message); + callbacksBuilder.pollingWaitCallback(waitTime, message); +} + +function redirectCallback() { + throw new Error('Not Implemented'); +} + +function scriptTextOutputCallback() { + var message = getString(properties.options.message); + callbacksBuilder.scriptTextOutputCallback(message); +} + +function selectIdPCallback() { + var providers = getObject(properties.options.providers); + callbacksBuilder.selectIdPCallback(providers); +} + +function stringAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getString(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required); + } +} + +function suspendedTextOutputCallback() { + var messageType = getInt(properties.options.messageType); + var message = getString(properties.options.message); + callbacksBuilder.suspendedTextOutputCallback(messageType, message); +} + +function termsAndConditionsCallback() { + var version = getString(properties.options.version); + var terms = getString(properties.options.terms); + var createDate = getString(properties.options.createDate); + callbacksBuilder.termsAndConditionsCallback(version, terms, createDate); +} + +function textInputCallback() { + var prompt = getString(properties.options.prompt); + var defaultText = getString(properties.options.defaultText); + if (isStringPresent(properties.options.defaultText)) { + callbacksBuilder.textInputCallback(prompt, defaultText); + } else { + callbacksBuilder.textInputCallback(prompt); + } +} + +function textOutputCallback() { + var messageType = getString(properties.options.messageType); + var message = getString(properties.options.message); + callbacksBuilder.textOutputCallback(messageType, message); +} + +function validatedPasswordCallback() { + var prompt = getString(properties.options.prompt); + var echoOn = getBoolean(properties.options.echoOn); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isArrayPresent(properties.options.failedPolicies)) { + callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly); + } +} + +function validatedUsernameCallback() { + var prompt = getString(properties.options.prompt); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isArrayPresent(properties.options.failedPolicies)) { + callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly); + } +} + +function x509CertificateCallback() { + throw new Error('Not Implemented'); +} + +function getBooleanAttributeInputCallback() { + setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0)); +} + +function getChoiceCallback() { + var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed); + var selections = callbacks.getChoiceCallbacks().get(0); + setProperty(multipleSelectionsAllowed ? selections : selections[0]); +} + +function getConfirmationCallback() { + setProperty(callbacks.getConfirmationCallbacks().get(0)); +} + +function getConsentMappingCallback() { + setProperty(callbacks.getConsentMappingCallbacks().get(0)); +} + +function getDeviceProfileCallback() { + setProperty(callbacks.getDeviceProfileCallbacks().get(0)); +} + +function getHiddenValueCallback() { + var id = getString(properties.options.id); + setProperty(callbacks.getHiddenValueCallbacks().get(id)); +} + +function getHttpCallback() { + setProperty(callbacks.getHttpCallbacks().get(0)); +} + +function getIdPCallback() { + setProperty(callbacks.getIdpCallbacks().get(0)); +} + +function getKbaCreateCallback() { + setProperty(callbacks.getKbaCreateCallbacks().get(0)); +} + +function getLanguageCallback() { + setProperty(callbacks.getLanguageCallbacks().get(0)); +} + +function getNameCallback() { + setProperty(callbacks.getNameCallbacks().get(0)); +} + +function getNumberAttributeInputCallback() { + setProperty(callbacks.getNumberAttributeInputCallbacks().get(0)); +} + +function getPasswordCallback() { + setProperty(callbacks.getPasswordCallbacks().get(0)); +} + +function getSelectIdPCallback() { + setProperty(callbacks.getSelectIdPCallbacks().get(0)); +} + +function getStringAttributeInputCallback() { + setProperty(callbacks.getStringAttributeInputCallbacks().get(0)); +} + +function getTermsAndConditionsCallback() { + setProperty(callbacks.getTermsAndConditionsCallbacks().get(0)); +} + +function getTextInputCallback() { + setProperty(callbacks.getTextInputCallbacks().get(0)); +} + +function getValidatedPasswordCallback() { + setProperty(callbacks.getValidatedPasswordCallbacks().get(0)); +} + +function getValidatedUsernameCallback() { + setProperty(callbacks.getValidatedUsernameCallbacks().get(0)); +} + +function getX509CertificateCallback() { + setProperty(callbacks.getX509CertificateCallbacks().get(0)); +} + +function main() { + if (!callbacks.isEmpty()) { + switch (properties.callback) { + case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break; + case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break; + case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break; + case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break; + case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break; + case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break; + case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break; + case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break; + case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break; + case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break; + case CALLBACKS.NAME_CALLBACK: getNameCallback(); break; + case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break; + case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break; + case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break; + case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break; + case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break; + case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break; + case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break; + case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break; + case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break; + default: break; + } + action.goTo(SCRIPT_OUTCOMES.OUTCOME); + return; + } + + switch (properties.callback) { + case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break; + case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break; + case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break; + case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break; + case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break; + case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break; + case CALLBACKS.HTTP_CALLBACK: httpCallback(); break; + case CALLBACKS.IDP_CALLBACK: idPCallback(); break; + case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break; + case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break; + case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break; + case CALLBACKS.NAME_CALLBACK: nameCallback(); break; + case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break; + case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break; + case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break; + case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break; + case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break; + case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break; + case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break; + case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break; + case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break; + case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break; + case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break; + case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break; + case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break; + case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break; + default: throw new Error('Unknown Callback'); // Should never reach this case + } +} + +main(); diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/Display-Callback.nodeTypes.json b/test/e2e/exports/full-export-separate/global/nodeTypes/Display-Callback.nodeTypes.json new file mode 100644 index 000000000..5cd596fa3 --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/Display-Callback.nodeTypes.json @@ -0,0 +1,93 @@ +{ + "nodeTypes": { + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback" + }, + "required": true, + "title": "Callback", + "type": "STRING" + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING" + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING" + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \n\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \"Hello World!\" }. \n\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\"\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT" + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING" + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING" + } + }, + "script": "file://Display-Callback.nodeTypes.js", + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/Display-State.nodeTypes.js b/test/e2e/exports/full-export-separate/global/nodeTypes/Display-State.nodeTypes.js new file mode 100644 index 000000000..a6c7f24b3 --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/Display-State.nodeTypes.js @@ -0,0 +1,29 @@ +var SCRIPT_OUTCOMES = { + OUTCOME: "outcome" +}; + +function main() { + if (!callbacks.isEmpty()) { + action.goTo(SCRIPT_OUTCOMES.OUTCOME); + return; + } + var keySet = nodeState.keys(); // Java Set + var keys = Array.from(keySet); // Make it into JavaScript array + debugState = {}; + for (var i in keys) { + var k = new String(keys[i]); + var item = nodeState.get(k); + if (typeof item === "object") { + debugState[k] = nodeState.getObject(k); + } else { + debugState[k] = nodeState.get(k); + } + } + if (properties.displayFormat === "JSON") { + callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`); + return; + } + callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`); +} + +main(); diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/Display-State.nodeTypes.json b/test/e2e/exports/full-export-separate/global/nodeTypes/Display-State.nodeTypes.json new file mode 100644 index 000000000..994d642df --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/Display-State.nodeTypes.json @@ -0,0 +1,35 @@ +{ + "nodeTypes": { + "8ab9f1aad4b4460a9c45d15fb148e221-1": { + "_id": "8ab9f1aad4b4460a9c45d15fb148e221-1", + "description": "Debug node that displays the shared and transient state of the journey for debugging purposes.", + "displayName": "Display State", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "displayFormat": { + "defaultValue": "TABLE", + "description": "The format in which to display the states.", + "multivalued": false, + "options": { + "JSON": "Raw JSON", + "TABLE": "HTML Table" + }, + "required": true, + "title": "Display Format", + "type": "STRING" + } + }, + "script": "file://Display-State.nodeTypes.js", + "serviceName": "8ab9f1aad4b4460a9c45d15fb148e221", + "tags": [ + "debug", + "testing" + ] + } + } +} diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/Generate-JWT.nodeTypes.js b/test/e2e/exports/full-export-separate/global/nodeTypes/Generate-JWT.nodeTypes.js new file mode 100644 index 000000000..0c9fbfee5 --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/Generate-JWT.nodeTypes.js @@ -0,0 +1,28 @@ +var aud = properties.audience; +var iss = properties.issuer; +var validity = properties.validity; +var esv = properties.signingkey; + +var signingkey = systemEnv.getProperty(esv); + +var username = nodeState.get("username"); + +var data = { + jwtType:"SIGNED", + jwsAlgorithm: "HS256", + issuer: iss, + subject: username, + audience: aud, + type: "JWT", + validityMinutes: validity, + signingKey: signingkey +}; + +var jwt = jwtAssertion.generateJwt(data); + +if (jwt !== null && jwt.length > 0) { + nodeState.putShared("assertionJwt" , jwt); + action.goTo("True"); +} else { + action.goTo("False"); +} diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/Generate-JWT.nodeTypes.json b/test/e2e/exports/full-export-separate/global/nodeTypes/Generate-JWT.nodeTypes.json new file mode 100644 index 000000000..f06121b2b --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/Generate-JWT.nodeTypes.json @@ -0,0 +1,54 @@ +{ + "nodeTypes": { + "e5ad0110c8ee4dafaae983003cd05d4a-1": { + "_id": "e5ad0110c8ee4dafaae983003cd05d4a-1", + "description": "Generate a signed JWT using the HMAC SHA-256 algorithm.", + "displayName": "Generate JWT", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": { + "audience": { + "description": "The audience (aud) claim", + "multivalued": false, + "required": true, + "title": "Audience", + "type": "STRING" + }, + "issuer": { + "description": "The issuer (iss) claim", + "multivalued": false, + "required": true, + "title": "Issuer", + "type": "STRING" + }, + "signingkey": { + "defaultValue": "esv.signing.key", + "description": "The secret label for the HMAC signing key", + "multivalued": false, + "required": true, + "title": "HMAC Signing Key", + "type": "STRING" + }, + "validity": { + "defaultValue": 5, + "description": "", + "multivalued": false, + "required": true, + "title": "Validity (minutes)", + "type": "NUMBER" + } + }, + "script": "file://Generate-JWT.nodeTypes.js", + "serviceName": "e5ad0110c8ee4dafaae983003cd05d4a", + "tags": [ + "Utilities", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/Has-Session-AM.nodeTypes.js b/test/e2e/exports/full-export-separate/global/nodeTypes/Has-Session-AM.nodeTypes.js new file mode 100644 index 000000000..c8711597e --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/Has-Session-AM.nodeTypes.js @@ -0,0 +1,10 @@ +var SCRIPT_OUTCOMES = { + TRUE: 'True', + FALSE: 'False' +} + +function main() { + action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE); +} + +main(); diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/Has-Session-AM.nodeTypes.json b/test/e2e/exports/full-export-separate/global/nodeTypes/Has-Session-AM.nodeTypes.json new file mode 100644 index 000000000..ebfb2e23d --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/Has-Session-AM.nodeTypes.json @@ -0,0 +1,22 @@ +{ + "nodeTypes": { + "session-1": { + "_id": "session-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session AM", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": "file://Has-Session-AM.nodeTypes.js", + "serviceName": "session", + "tags": [ + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/Has-Session.nodeTypes.js b/test/e2e/exports/full-export-separate/global/nodeTypes/Has-Session.nodeTypes.js new file mode 100644 index 000000000..c8711597e --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/Has-Session.nodeTypes.js @@ -0,0 +1,10 @@ +var SCRIPT_OUTCOMES = { + TRUE: 'True', + FALSE: 'False' +} + +function main() { + action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE); +} + +main(); diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/Has-Session.nodeTypes.json b/test/e2e/exports/full-export-separate/global/nodeTypes/Has-Session.nodeTypes.json new file mode 100644 index 000000000..0c5cd8268 --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/Has-Session.nodeTypes.json @@ -0,0 +1,22 @@ +{ + "nodeTypes": { + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": "file://Has-Session.nodeTypes.js", + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/Vector-ALU.nodeTypes.js b/test/e2e/exports/full-export-separate/global/nodeTypes/Vector-ALU.nodeTypes.js new file mode 100644 index 000000000..91ba8e8b8 --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/Vector-ALU.nodeTypes.js @@ -0,0 +1,53 @@ +var SCRIPT_OUTCOMES = { + SUCCESS: 'Success' +}; + +var OPERATORS = { + ADD: "ADD", + SUBTRACT: "SUBTRACT", + DOT: "DOT", + CROSS: "CROSS" +} + +function add(a, b) { + return a.map((v, i) => v + b[i]); +} + +function subtract(a, b) { + return a.map((v, i) => v - b[i]); +} + +function dot(a, b) { + return a.reduce((sum, v, i) => sum + v * b[i], 0); +} + +function cross(a, b) { + return [ + a[1] * b[2] - a[2] * b[1], + a[2] * b[0] - a[0] * b[2], + a[0] * b[1] - a[1] * b[0] + ]; +} + +function main() { + if (properties.a.length !== properties.b.length) throw new Error("Vectors not the same dimension."); + switch (properties.operator) { + case OPERATORS.ADD: + nodeState.putShared("c", add(properties.a, properties.b)); + break; + case OPERATORS.SUBTRACT: + nodeState.putShared("c", subtract(properties.a, properties.b)); + break; + case OPERATORS.DOT: + nodeState.putShared("c", dot(properties.a, properties.b)); + break; + case OPERATORS.CROSS: + if (properties.a.length !== 3) throw new Error("Vectors not dimension 3 for cross product"); + nodeState.putShared("c", cross(properties.a, properties.b)); + break; + default: throw new Error("Unknown operator."); + } + action.goTo(SCRIPT_OUTCOMES.SUCCESS); +} + +main(); diff --git a/test/e2e/exports/full-export-separate/global/nodeTypes/Vector-ALU.nodeTypes.json b/test/e2e/exports/full-export-separate/global/nodeTypes/Vector-ALU.nodeTypes.json new file mode 100644 index 000000000..fc3fdeb76 --- /dev/null +++ b/test/e2e/exports/full-export-separate/global/nodeTypes/Vector-ALU.nodeTypes.json @@ -0,0 +1,64 @@ +{ + "nodeTypes": { + "c15e2efb3deb4d4ea338c74a6440b69f-1": { + "_id": "c15e2efb3deb4d4ea338c74a6440b69f-1", + "description": "Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \"c\".", + "displayName": "Vector ALU", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "Success" + ], + "outputs": [ + "c" + ], + "properties": { + "a": { + "defaultValue": [ + 1, + 2, + 3 + ], + "description": "Left vector operand", + "multivalued": true, + "required": true, + "title": "A", + "type": "NUMBER" + }, + "b": { + "defaultValue": [ + 4, + 5, + 6 + ], + "description": "Right vector operand", + "multivalued": true, + "required": true, + "title": "B", + "type": "NUMBER" + }, + "operator": { + "defaultValue": "DOT", + "description": "The binary operation to perform on the vectors.", + "multivalued": false, + "options": { + "ADD": "+", + "CROSS": "X", + "DOT": ".", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": "file://Vector-ALU.nodeTypes.js", + "serviceName": "c15e2efb3deb4d4ea338c74a6440b69f", + "tags": [ + "math", + "vector", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/promote/node/global/nodeTypes/ALU.nodeTypes.js b/test/e2e/exports/promote/node/global/nodeTypes/ALU.nodeTypes.js new file mode 100644 index 000000000..14635619f --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/ALU.nodeTypes.js @@ -0,0 +1,34 @@ +var SCRIPT_OUTCOMES = { + SUCCESS: 'Success' +}; + +var OPERATORS = { + ADD: "ADD", + SUBTRACT: "SUBTRACT", + MULTIPLY: "MULTIPLY", + DIVIDE: "DIVIDE" +} + +function main() { + var a = Number(properties.a); + var b = Number(properties.b); + switch (properties.operator) { + case OPERATORS.ADD: + nodeState.putShared("z", a + b); + break; + case OPERATORS.SUBTRACT: + nodeState.putShared("z", a - b); + break; + case OPERATORS.MULTIPLY: + nodeState.putShared("z", a * b); + break; + case OPERATORS.DIVIDE: + if (b == 0) throw new Error("Cannot divide by 0"); + nodeState.putShared("z", a / b); + break; + default: throw new Error("Unknown operator."); + } + action.goTo(SCRIPT_OUTCOMES.SUCCESS); +} + +main(); diff --git a/test/e2e/exports/promote/node/global/nodeTypes/ALU.nodeTypes.json b/test/e2e/exports/promote/node/global/nodeTypes/ALU.nodeTypes.json new file mode 100644 index 000000000..e5239980e --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/ALU.nodeTypes.json @@ -0,0 +1,42 @@ +{ + "nodeTypes": { + "c6063fb2f5dc42dd9772bedc93898bd8-1": { + "_id": "c6063fb2f5dc42dd9772bedc93898bd8-1", + "description": "Simple ALU that performs basic binary math operations. Expects an \"x\" and \"y\" value on the shared state, and will produce a new \"z\" value on the shared state as output.", + "displayName": "ALU", + "errorOutcome": true, + "inputs": [ + "x", + "y" + ], + "outcomes": [ + "Success" + ], + "outputs": [ + "z" + ], + "properties": { + "operator": { + "defaultValue": "ADD", + "description": "The operation to perform.", + "multivalued": false, + "options": { + "ADD": "+", + "DIVIDE": "/", + "MULTIPLY": "*", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": "file://ALU.nodeTypes.js", + "serviceName": "c6063fb2f5dc42dd9772bedc93898bd8", + "tags": [ + "math", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/promote/node/global/nodeTypes/Display-Callback.nodeTypes.js b/test/e2e/exports/promote/node/global/nodeTypes/Display-Callback.nodeTypes.js new file mode 100644 index 000000000..6b682c6c1 --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/Display-Callback.nodeTypes.js @@ -0,0 +1,511 @@ +var SCRIPT_OUTCOMES = { + OUTCOME: 'outcome' +}; + +var CALLBACKS = { + BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK", + CHOICE_CALLBACK: "CHOICE_CALLBACK", + CONFIRMATION_CALLBACK: "CONFIRMATION_CALLBACK", + CONSENT_MAPPING_CALLBACK: "CONSENT_MAPPING_CALLBACK", + DEVICE_PROFILE_CALLBACK: "DEVICE_PROFILE_CALLBACK", + HIDDEN_VALUE_CALLBACK: "HIDDEN_VALUE_CALLBACK", + HTTP_CALLBACK: "HTTP_CALLBACK", + IDP_CALLBACK: "IDP_CALLBACK", + KBA_CREATE_CALLBACK: "KBA_CREATE_CALLBACK", + LANGUAGE_CALLBACK: "LANGUAGE_CALLBACK", + METADATA_CALLBACK: "METADATA_CALLBACK", + NAME_CALLBACK: "NAME_CALLBACK", + NUMBER_ATTRIBUTE_INPUT_CALLBACK: "NUMBER_ATTRIBUTE_INPUT_CALLBACK", + PASSWORD_CALLBACK: "PASSWORD_CALLBACK", + POLLING_WAIT_CALLBACK: "POLLING_WAIT_CALLBACK", + REDIRECT_CALLBACK: "REDIRECT_CALLBACK", + SCRIPT_TEXT_OUTPUT_CALLBACK: "SCRIPT_TEXT_OUTPUT_CALLBACK", + SELECT_IDP_CALLBACK: "SELECT_IDP_CALLBACK", + STRING_ATTRIBUTE_INPUT_CALLBACK: "STRING_ATTRIBUTE_INPUT_CALLBACK", + SUSPENDED_TEXT_OUTPUT_CALLBACK: "SUSPENDED_TEXT_OUTPUT_CALLBACK", + TERMS_AND_CONDITIONS_CALLBACK: "TERMS_AND_CONDITIONS_CALLBACK", + TEXT_INPUT_CALLBACK: "TEXT_INPUT_CALLBACK", + TEXT_OUTPUT_CALLBACK: "TEXT_OUTPUT_CALLBACK", + VALIDATED_PASSWORD_CALLBACK: "VALIDATED_PASSWORD_CALLBACK", + VALIDATED_USERNAME_CALLBACK: "VALIDATED_USERNAME_CALLBACK", + X509_CERTIFICATE_CALLBACK: "X509_CERTIFICATE_CALLBACK" +} + +function isStringPresent(value) { + return value; +} + +function getString(value) { + return value || ''; +} + +function isArrayPresent(value) { + return value; +} + +function getArray(value) { + return value ? JSON.parse(value) : []; +} + +function isObjectPresent(value) { + return value; +} + +function getObject(value) { + return value ? JSON.parse(value) : {}; +} + +function isIntPresent(value) { + return value; +} + +function getInt(value) { + return value ? parseInt(value) : 0; +} + +function isDoublePresent(value) { + return value; +} + +function getDouble(value) { + return value ? parseFloat(value) : 0.0; +} + +function isBooleanPresent(value) { + return value; +} + +function getBoolean(value) { + return value ? value.toLowerCase() === 'true' : false; +} + +function setProperty(value) { + if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value); + if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value); + if (properties.objectSharedProperty) { + var attributes = {}; + attributes[properties.objectSharedProperty] = value; + nodeState.mergeShared({ + objectAttributes: attributes + }); + } + if (properties.objectTransientProperty) { + var attributes = {}; + attributes[properties.objectTransientProperty] = value; + nodeState.mergeTransient({ + objectAttributes: attributes + }); + } +} + +function booleanAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getBoolean(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required); + } +} + +function choiceCallback() { + var prompt = getString(properties.options.prompt); + var choices = getArray(properties.options.choices); + var defaultChoice = getInt(properties.options.defaultChoice); + var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed); + callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed); +} + +function confirmationCallback() { + var prompt = getString(properties.options.prompt); + var messageType = getInt(properties.options.messageType); + var options = getArray(properties.options.options); + var optionType = getInt(properties.options.optionType); + var defaultOption = getInt(properties.options.defaultOption); + if (isStringPresent(properties.options.prompt)) { + if (isIntPresent(properties.options.optionType)) { + callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption); + } else { + callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption); + } + } else { + if (isIntPresent(properties.options.optionType)) { + callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption); + } else { + callbacksBuilder.confirmationCallback(messageType, options, defaultOption); + } + } +} + +function consentMappingCallback() { + var config = getObject(properties.options.config); + var message = getString(properties.options.message); + var isRequired = getBoolean(properties.options.isRequired); + var name = getString(properties.options.name); + var displayName = getString(properties.options.displayName); + var icon = getString(properties.options.icon); + var accessLevel = getString(properties.options.accessLevel); + var titles = getArray(properties.options.titles); + if (isObjectPresent(properties.options.prompt)) { + callbacksBuilder.consentMappingCallback(config, message, isRequired); + } else { + callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired); + } +} + +function deviceProfileCallback() { + var metadata = getBoolean(properties.options.metadata); + var location = getBoolean(properties.options.location); + var message = getString(properties.options.message); + callbacksBuilder.deviceProfileCallback(metadata, location, message); +} + +function hiddenValueCallback() { + var id = getString(properties.options.id); + var value = getString(properties.options.value); + callbacksBuilder.hiddenValueCallback(id, value); +} + +function httpCallback() { + var authorizationHeader = getString(properties.options.authorizationHeader); + var negotiationHeader = getString(properties.options.negotiationHeader); + var authRHeader = getString(properties.options.authRHeader); + var negoName = getString(properties.options.negoName); + var negoValue = getString(properties.options.negoValue); + if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) { + var errorCode = getString(properties.options.errorCode); + callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode); + } else { + var errorCode = getInt(properties.options.errorCode); + callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode); + } +} + +function idPCallback() { + var provider = getString(properties.options.provider); + var clientId = getString(properties.options.clientId); + var redirectUri = getString(properties.options.redirectUri); + var scope = getArray(properties.options.scope); + var nonce = getString(properties.options.nonce); + var request = getString(properties.options.request); + var requestUri = getString(properties.options.requestUri); + var acrValues = getArray(properties.options.acrValues); + var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo); + var token = getString(properties.options.token); + var tokenType = getString(properties.options.tokenType); + if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) { + callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType); + } else { + callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo); + } +} + +function kbaCreateCallback() { + var prompt = getString(properties.options.prompt); + var predefinedQuestions = getArray(properties.options.predefinedQuestions); + var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions); + callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions); +} + +function languageCallback() { + var language = getString(properties.options.language); + var country = getString(properties.options.country); + callbacksBuilder.languageCallback(language, country); +} + +function metadataCallback() { + var outputValue = getObject(properties.options.outputValue); + callbacksBuilder.metadataCallback(outputValue); +} + +function nameCallback() { + var prompt = getString(properties.options.prompt); + var defaultName = getString(properties.options.defaultName); + if (isStringPresent(properties.options.defaultName)) { + callbacksBuilder.nameCallback(prompt, defaultName); + } else { + callbacksBuilder.nameCallback(prompt); + } +} + +function numberAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getDouble(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required); + } +} + +function passwordCallback() { + var prompt = getString(properties.options.prompt); + var echoOn = getBoolean(properties.options.echoOn); + callbacksBuilder.passwordCallback(prompt, echoOn); +} + +function pollingWaitCallback() { + var waitTime = getString(properties.options.waitTime); + var message = getString(properties.options.message); + callbacksBuilder.pollingWaitCallback(waitTime, message); +} + +function redirectCallback() { + throw new Error('Not Implemented'); +} + +function scriptTextOutputCallback() { + var message = getString(properties.options.message); + callbacksBuilder.scriptTextOutputCallback(message); +} + +function selectIdPCallback() { + var providers = getObject(properties.options.providers); + callbacksBuilder.selectIdPCallback(providers); +} + +function stringAttributeInputCallback() { + var name = getString(properties.options.name); + var prompt = getString(properties.options.prompt); + var value = getString(properties.options.value); + var required = getBoolean(properties.options.required); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) { + if (isArrayPresent(failedPolicies)) { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly); + } + } else if (isArrayPresent(failedPolicies)) { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies); + } else { + callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required); + } +} + +function suspendedTextOutputCallback() { + var messageType = getInt(properties.options.messageType); + var message = getString(properties.options.message); + callbacksBuilder.suspendedTextOutputCallback(messageType, message); +} + +function termsAndConditionsCallback() { + var version = getString(properties.options.version); + var terms = getString(properties.options.terms); + var createDate = getString(properties.options.createDate); + callbacksBuilder.termsAndConditionsCallback(version, terms, createDate); +} + +function textInputCallback() { + var prompt = getString(properties.options.prompt); + var defaultText = getString(properties.options.defaultText); + if (isStringPresent(properties.options.defaultText)) { + callbacksBuilder.textInputCallback(prompt, defaultText); + } else { + callbacksBuilder.textInputCallback(prompt); + } +} + +function textOutputCallback() { + var messageType = getString(properties.options.messageType); + var message = getString(properties.options.message); + callbacksBuilder.textOutputCallback(messageType, message); +} + +function validatedPasswordCallback() { + var prompt = getString(properties.options.prompt); + var echoOn = getBoolean(properties.options.echoOn); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isArrayPresent(properties.options.failedPolicies)) { + callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly); + } +} + +function validatedUsernameCallback() { + var prompt = getString(properties.options.prompt); + var policies = getObject(properties.options.policies); + var validateOnly = getBoolean(properties.options.validateOnly); + var failedPolicies = getArray(properties.options.failedPolicies); + if (isArrayPresent(properties.options.failedPolicies)) { + callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies); + } else { + callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly); + } +} + +function x509CertificateCallback() { + throw new Error('Not Implemented'); +} + +function getBooleanAttributeInputCallback() { + setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0)); +} + +function getChoiceCallback() { + var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed); + var selections = callbacks.getChoiceCallbacks().get(0); + setProperty(multipleSelectionsAllowed ? selections : selections[0]); +} + +function getConfirmationCallback() { + setProperty(callbacks.getConfirmationCallbacks().get(0)); +} + +function getConsentMappingCallback() { + setProperty(callbacks.getConsentMappingCallbacks().get(0)); +} + +function getDeviceProfileCallback() { + setProperty(callbacks.getDeviceProfileCallbacks().get(0)); +} + +function getHiddenValueCallback() { + var id = getString(properties.options.id); + setProperty(callbacks.getHiddenValueCallbacks().get(id)); +} + +function getHttpCallback() { + setProperty(callbacks.getHttpCallbacks().get(0)); +} + +function getIdPCallback() { + setProperty(callbacks.getIdpCallbacks().get(0)); +} + +function getKbaCreateCallback() { + setProperty(callbacks.getKbaCreateCallbacks().get(0)); +} + +function getLanguageCallback() { + setProperty(callbacks.getLanguageCallbacks().get(0)); +} + +function getNameCallback() { + setProperty(callbacks.getNameCallbacks().get(0)); +} + +function getNumberAttributeInputCallback() { + setProperty(callbacks.getNumberAttributeInputCallbacks().get(0)); +} + +function getPasswordCallback() { + setProperty(callbacks.getPasswordCallbacks().get(0)); +} + +function getSelectIdPCallback() { + setProperty(callbacks.getSelectIdPCallbacks().get(0)); +} + +function getStringAttributeInputCallback() { + setProperty(callbacks.getStringAttributeInputCallbacks().get(0)); +} + +function getTermsAndConditionsCallback() { + setProperty(callbacks.getTermsAndConditionsCallbacks().get(0)); +} + +function getTextInputCallback() { + setProperty(callbacks.getTextInputCallbacks().get(0)); +} + +function getValidatedPasswordCallback() { + setProperty(callbacks.getValidatedPasswordCallbacks().get(0)); +} + +function getValidatedUsernameCallback() { + setProperty(callbacks.getValidatedUsernameCallbacks().get(0)); +} + +function getX509CertificateCallback() { + setProperty(callbacks.getX509CertificateCallbacks().get(0)); +} + +function main() { + if (!callbacks.isEmpty()) { + switch (properties.callback) { + case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break; + case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break; + case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break; + case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break; + case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break; + case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break; + case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break; + case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break; + case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break; + case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break; + case CALLBACKS.NAME_CALLBACK: getNameCallback(); break; + case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break; + case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break; + case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break; + case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break; + case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break; + case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break; + case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break; + case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break; + case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break; + default: break; + } + action.goTo(SCRIPT_OUTCOMES.OUTCOME); + return; + } + + switch (properties.callback) { + case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break; + case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break; + case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break; + case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break; + case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break; + case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break; + case CALLBACKS.HTTP_CALLBACK: httpCallback(); break; + case CALLBACKS.IDP_CALLBACK: idPCallback(); break; + case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break; + case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break; + case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break; + case CALLBACKS.NAME_CALLBACK: nameCallback(); break; + case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break; + case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break; + case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break; + case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break; + case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break; + case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break; + case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break; + case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break; + case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break; + case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break; + case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break; + case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break; + case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break; + case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break; + default: throw new Error('Unknown Callback'); // Should never reach this case + } +} + +main(); diff --git a/test/e2e/exports/promote/node/global/nodeTypes/Display-Callback.nodeTypes.json b/test/e2e/exports/promote/node/global/nodeTypes/Display-Callback.nodeTypes.json new file mode 100644 index 000000000..5cd596fa3 --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/Display-Callback.nodeTypes.json @@ -0,0 +1,93 @@ +{ + "nodeTypes": { + "ef81b1a52c914710b3388caebfe7233a-1": { + "_id": "ef81b1a52c914710b3388caebfe7233a-1", + "description": "Displays custom callback to the page", + "displayName": "Display Callback", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "callback": { + "description": "The callback to display", + "multivalued": false, + "options": { + "BOOLEAN_ATTRIBUTE_INPUT_CALLBACK": "booleanAttributeInputCallback", + "CHOICE_CALLBACK": "choiceCallback", + "CONFIRMATION_CALLBACK": "confirmationCallback", + "CONSENT_MAPPING_CALLBACK": "consentMappingCallback", + "DEVICE_PROFILE_CALLBACK": "deviceProfileCallback", + "HIDDEN_VALUE_CALLBACK": "hiddenValueCallback", + "HTTP_CALLBACK": "httpCallback", + "IDP_CALLBACK": "idPCallback", + "KBA_CREATE_CALLBACK": "kbaCreateCallback", + "LANGUAGE_CALLBACK": "languageCallback", + "METADATA_CALLBACK": "metadataCallback", + "NAME_CALLBACK": "nameCallback", + "NUMBER_ATTRIBUTE_INPUT_CALLBACK": "numberAttributeInputCallback", + "PASSWORD_CALLBACK": "passwordCallback", + "POLLING_WAIT_CALLBACK": "pollingWaitCallback", + "REDIRECT_CALLBACK": "redirectCallback", + "SCRIPT_TEXT_OUTPUT_CALLBACK": "scriptTextOutputCallback", + "SELECT_IDP_CALLBACK": "selectIdPCallback", + "STRING_ATTRIBUTE_INPUT_CALLBACK": "stringAttributeInputCallback", + "SUSPENDED_TEXT_OUTPUT_CALLBACK": "suspendedTextOutputCallback", + "TERMS_AND_CONDITIONS_CALLBACK": "termsAndConditionsCallback", + "TEXT_INPUT_CALLBACK": "textInputCallback", + "TEXT_OUTPUT_CALLBACK": "textOutputCallback", + "VALIDATED_PASSWORD_CALLBACK": "validatedPasswordCallback", + "VALIDATED_USERNAME_CALLBACK": "validatedUsernameCallback", + "X509_CERTIFICATE_CALLBACK": "x509CertificateCallback" + }, + "required": true, + "title": "Callback", + "type": "STRING" + }, + "objectSharedProperty": { + "description": "The objectAttributes property on the shared state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Shared Property", + "type": "STRING" + }, + "objectTransientProperty": { + "description": "The objectAttributes property on the transient state to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Object Attributes Transient Property", + "type": "STRING" + }, + "options": { + "description": "The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \n\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \"Hello World!\" }. \n\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\"\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).", + "multivalued": false, + "required": true, + "title": "Options", + "type": "OBJECT" + }, + "sharedProperty": { + "description": "The shared state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Shared State Property", + "type": "STRING" + }, + "transientProperty": { + "description": "The transient state property to put the callback input into (if applicable)", + "multivalued": false, + "required": false, + "title": "Transient State Property", + "type": "STRING" + } + }, + "script": "file://Display-Callback.nodeTypes.js", + "serviceName": "ef81b1a52c914710b3388caebfe7233a", + "tags": [ + "callback", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/promote/node/global/nodeTypes/Display-State.nodeTypes.js b/test/e2e/exports/promote/node/global/nodeTypes/Display-State.nodeTypes.js new file mode 100644 index 000000000..a6c7f24b3 --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/Display-State.nodeTypes.js @@ -0,0 +1,29 @@ +var SCRIPT_OUTCOMES = { + OUTCOME: "outcome" +}; + +function main() { + if (!callbacks.isEmpty()) { + action.goTo(SCRIPT_OUTCOMES.OUTCOME); + return; + } + var keySet = nodeState.keys(); // Java Set + var keys = Array.from(keySet); // Make it into JavaScript array + debugState = {}; + for (var i in keys) { + var k = new String(keys[i]); + var item = nodeState.get(k); + if (typeof item === "object") { + debugState[k] = nodeState.getObject(k); + } else { + debugState[k] = nodeState.get(k); + } + } + if (properties.displayFormat === "JSON") { + callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`); + return; + } + callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`); +} + +main(); diff --git a/test/e2e/exports/promote/node/global/nodeTypes/Display-State.nodeTypes.json b/test/e2e/exports/promote/node/global/nodeTypes/Display-State.nodeTypes.json new file mode 100644 index 000000000..994d642df --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/Display-State.nodeTypes.json @@ -0,0 +1,35 @@ +{ + "nodeTypes": { + "8ab9f1aad4b4460a9c45d15fb148e221-1": { + "_id": "8ab9f1aad4b4460a9c45d15fb148e221-1", + "description": "Debug node that displays the shared and transient state of the journey for debugging purposes.", + "displayName": "Display State", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "outcome" + ], + "outputs": [], + "properties": { + "displayFormat": { + "defaultValue": "TABLE", + "description": "The format in which to display the states.", + "multivalued": false, + "options": { + "JSON": "Raw JSON", + "TABLE": "HTML Table" + }, + "required": true, + "title": "Display Format", + "type": "STRING" + } + }, + "script": "file://Display-State.nodeTypes.js", + "serviceName": "8ab9f1aad4b4460a9c45d15fb148e221", + "tags": [ + "debug", + "testing" + ] + } + } +} diff --git a/test/e2e/exports/promote/node/global/nodeTypes/Generate-JWT.nodeTypes.js b/test/e2e/exports/promote/node/global/nodeTypes/Generate-JWT.nodeTypes.js new file mode 100644 index 000000000..0c9fbfee5 --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/Generate-JWT.nodeTypes.js @@ -0,0 +1,28 @@ +var aud = properties.audience; +var iss = properties.issuer; +var validity = properties.validity; +var esv = properties.signingkey; + +var signingkey = systemEnv.getProperty(esv); + +var username = nodeState.get("username"); + +var data = { + jwtType:"SIGNED", + jwsAlgorithm: "HS256", + issuer: iss, + subject: username, + audience: aud, + type: "JWT", + validityMinutes: validity, + signingKey: signingkey +}; + +var jwt = jwtAssertion.generateJwt(data); + +if (jwt !== null && jwt.length > 0) { + nodeState.putShared("assertionJwt" , jwt); + action.goTo("True"); +} else { + action.goTo("False"); +} diff --git a/test/e2e/exports/promote/node/global/nodeTypes/Generate-JWT.nodeTypes.json b/test/e2e/exports/promote/node/global/nodeTypes/Generate-JWT.nodeTypes.json new file mode 100644 index 000000000..f06121b2b --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/Generate-JWT.nodeTypes.json @@ -0,0 +1,54 @@ +{ + "nodeTypes": { + "e5ad0110c8ee4dafaae983003cd05d4a-1": { + "_id": "e5ad0110c8ee4dafaae983003cd05d4a-1", + "description": "Generate a signed JWT using the HMAC SHA-256 algorithm.", + "displayName": "Generate JWT", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": { + "audience": { + "description": "The audience (aud) claim", + "multivalued": false, + "required": true, + "title": "Audience", + "type": "STRING" + }, + "issuer": { + "description": "The issuer (iss) claim", + "multivalued": false, + "required": true, + "title": "Issuer", + "type": "STRING" + }, + "signingkey": { + "defaultValue": "esv.signing.key", + "description": "The secret label for the HMAC signing key", + "multivalued": false, + "required": true, + "title": "HMAC Signing Key", + "type": "STRING" + }, + "validity": { + "defaultValue": 5, + "description": "", + "multivalued": false, + "required": true, + "title": "Validity (minutes)", + "type": "NUMBER" + } + }, + "script": "file://Generate-JWT.nodeTypes.js", + "serviceName": "e5ad0110c8ee4dafaae983003cd05d4a", + "tags": [ + "Utilities", + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/promote/node/global/nodeTypes/Has-Session-AM.nodeTypes.js b/test/e2e/exports/promote/node/global/nodeTypes/Has-Session-AM.nodeTypes.js new file mode 100644 index 000000000..c8711597e --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/Has-Session-AM.nodeTypes.js @@ -0,0 +1,10 @@ +var SCRIPT_OUTCOMES = { + TRUE: 'True', + FALSE: 'False' +} + +function main() { + action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE); +} + +main(); diff --git a/test/e2e/exports/promote/node/global/nodeTypes/Has-Session-AM.nodeTypes.json b/test/e2e/exports/promote/node/global/nodeTypes/Has-Session-AM.nodeTypes.json new file mode 100644 index 000000000..ebfb2e23d --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/Has-Session-AM.nodeTypes.json @@ -0,0 +1,22 @@ +{ + "nodeTypes": { + "session-1": { + "_id": "session-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session AM", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": "file://Has-Session-AM.nodeTypes.js", + "serviceName": "session", + "tags": [ + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/promote/node/global/nodeTypes/Has-Session.nodeTypes.js b/test/e2e/exports/promote/node/global/nodeTypes/Has-Session.nodeTypes.js new file mode 100644 index 000000000..c8711597e --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/Has-Session.nodeTypes.js @@ -0,0 +1,10 @@ +var SCRIPT_OUTCOMES = { + TRUE: 'True', + FALSE: 'False' +} + +function main() { + action.goTo(typeof existingSession === "undefined" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE); +} + +main(); diff --git a/test/e2e/exports/promote/node/global/nodeTypes/Has-Session.nodeTypes.json b/test/e2e/exports/promote/node/global/nodeTypes/Has-Session.nodeTypes.json new file mode 100644 index 000000000..0c5cd8268 --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/Has-Session.nodeTypes.json @@ -0,0 +1,22 @@ +{ + "nodeTypes": { + "c605506774a848f7877b4d17a453bd39-1": { + "_id": "c605506774a848f7877b4d17a453bd39-1", + "description": "Checks if the user has a current session.", + "displayName": "Has Session", + "errorOutcome": false, + "inputs": [], + "outcomes": [ + "True", + "False" + ], + "outputs": [], + "properties": {}, + "script": "file://Has-Session.nodeTypes.js", + "serviceName": "c605506774a848f7877b4d17a453bd39", + "tags": [ + "utilities" + ] + } + } +} diff --git a/test/e2e/exports/promote/node/global/nodeTypes/Vector-ALU.nodeTypes.js b/test/e2e/exports/promote/node/global/nodeTypes/Vector-ALU.nodeTypes.js new file mode 100644 index 000000000..91ba8e8b8 --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/Vector-ALU.nodeTypes.js @@ -0,0 +1,53 @@ +var SCRIPT_OUTCOMES = { + SUCCESS: 'Success' +}; + +var OPERATORS = { + ADD: "ADD", + SUBTRACT: "SUBTRACT", + DOT: "DOT", + CROSS: "CROSS" +} + +function add(a, b) { + return a.map((v, i) => v + b[i]); +} + +function subtract(a, b) { + return a.map((v, i) => v - b[i]); +} + +function dot(a, b) { + return a.reduce((sum, v, i) => sum + v * b[i], 0); +} + +function cross(a, b) { + return [ + a[1] * b[2] - a[2] * b[1], + a[2] * b[0] - a[0] * b[2], + a[0] * b[1] - a[1] * b[0] + ]; +} + +function main() { + if (properties.a.length !== properties.b.length) throw new Error("Vectors not the same dimension."); + switch (properties.operator) { + case OPERATORS.ADD: + nodeState.putShared("c", add(properties.a, properties.b)); + break; + case OPERATORS.SUBTRACT: + nodeState.putShared("c", subtract(properties.a, properties.b)); + break; + case OPERATORS.DOT: + nodeState.putShared("c", dot(properties.a, properties.b)); + break; + case OPERATORS.CROSS: + if (properties.a.length !== 3) throw new Error("Vectors not dimension 3 for cross product"); + nodeState.putShared("c", cross(properties.a, properties.b)); + break; + default: throw new Error("Unknown operator."); + } + action.goTo(SCRIPT_OUTCOMES.SUCCESS); +} + +main(); diff --git a/test/e2e/exports/promote/node/global/nodeTypes/Vector-ALU.nodeTypes.json b/test/e2e/exports/promote/node/global/nodeTypes/Vector-ALU.nodeTypes.json new file mode 100644 index 000000000..fc3fdeb76 --- /dev/null +++ b/test/e2e/exports/promote/node/global/nodeTypes/Vector-ALU.nodeTypes.json @@ -0,0 +1,64 @@ +{ + "nodeTypes": { + "c15e2efb3deb4d4ea338c74a6440b69f-1": { + "_id": "c15e2efb3deb4d4ea338c74a6440b69f-1", + "description": "Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \"c\".", + "displayName": "Vector ALU", + "errorOutcome": true, + "inputs": [], + "outcomes": [ + "Success" + ], + "outputs": [ + "c" + ], + "properties": { + "a": { + "defaultValue": [ + 1, + 2, + 3 + ], + "description": "Left vector operand", + "multivalued": true, + "required": true, + "title": "A", + "type": "NUMBER" + }, + "b": { + "defaultValue": [ + 4, + 5, + 6 + ], + "description": "Right vector operand", + "multivalued": true, + "required": true, + "title": "B", + "type": "NUMBER" + }, + "operator": { + "defaultValue": "DOT", + "description": "The binary operation to perform on the vectors.", + "multivalued": false, + "options": { + "ADD": "+", + "CROSS": "X", + "DOT": ".", + "SUBTRACT": "-" + }, + "required": true, + "title": "Operator", + "type": "STRING" + } + }, + "script": "file://Vector-ALU.nodeTypes.js", + "serviceName": "c15e2efb3deb4d4ea338c74a6440b69f", + "tags": [ + "math", + "vector", + "utilities" + ] + } + } +} diff --git a/test/e2e/mocks/config_603940551/export_4211608755/0_AD_3050885125/am_1076162899/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/0_AD_3050885125/am_1076162899/recording.har index afe1ecca0..6d7ee938b 100644 --- a/test/e2e/mocks/config_603940551/export_4211608755/0_AD_3050885125/am_1076162899/recording.har +++ b/test/e2e/mocks/config_603940551/export_4211608755/0_AD_3050885125/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/config_603940551/export_4211608755/0_AsxD_2934368820/am_1076162899/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/0_AsxD_2934368820/am_1076162899/recording.har index 1b51d1dd0..81119a721 100644 --- a/test/e2e/mocks/config_603940551/export_4211608755/0_AsxD_2934368820/am_1076162899/recording.har +++ b/test/e2e/mocks/config_603940551/export_4211608755/0_AsxD_2934368820/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/config_603940551/export_4211608755/0_RAD_include-active-values_1341669850/am_1076162899/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/0_RAD_include-active-values_1341669850/am_1076162899/recording.har index 05a2225bc..6d14a4fcb 100644 --- a/test/e2e/mocks/config_603940551/export_4211608755/0_RAD_include-active-values_1341669850/am_1076162899/recording.har +++ b/test/e2e/mocks/config_603940551/export_4211608755/0_RAD_include-active-values_1341669850/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/config_603940551/export_4211608755/0_RAsxD_m_1035367322/am_1076162899/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/0_RAsxD_m_1035367322/am_1076162899/recording.har index 5e91f5d9a..6d49909cf 100644 --- a/test/e2e/mocks/config_603940551/export_4211608755/0_RAsxD_m_1035367322/am_1076162899/recording.har +++ b/test/e2e/mocks/config_603940551/export_4211608755/0_RAsxD_m_1035367322/am_1076162899/recording.har @@ -7,6 +7,142 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ff404a7f-23a1-4b5e-9102-c2c8317a1df4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "cookie", + "value": "iPlanetDirectoryPro=" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.classic.com:8080" + } + ], + "headersSize": 568, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "http://openam-frodo-dev.classic.com:8080/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33585, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"296916566\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"764229896\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1484382943\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"419010643\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"390387834\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"745481489\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"733279755\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "transfer-encoding", + "value": "chunked" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 18:32:56 GMT" + }, + { + "name": "keep-alive", + "value": "timeout=20" + }, + { + "name": "connection", + "value": "keep-alive" + } + ], + "headersSize": 499, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T18:32:56.128Z", + "time": 14, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 14 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/config_603940551/export_4211608755/0_adND_177518607/am_1076162899/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/0_adND_177518607/am_1076162899/recording.har index acb3e86e6..f84ca2f0b 100644 --- a/test/e2e/mocks/config_603940551/export_4211608755/0_adND_177518607/am_1076162899/recording.har +++ b/test/e2e/mocks/config_603940551/export_4211608755/0_adND_177518607/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/config_603940551/export_4211608755/0_adND_m_880096807/am_1076162899/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/0_adND_m_880096807/am_1076162899/recording.har index 0df433873..9f2333e41 100644 --- a/test/e2e/mocks/config_603940551/export_4211608755/0_adND_m_880096807/am_1076162899/recording.har +++ b/test/e2e/mocks/config_603940551/export_4211608755/0_adND_m_880096807/am_1076162899/recording.har @@ -7,6 +7,142 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ff404a7f-23a1-4b5e-9102-c2c8317a1df4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "cookie", + "value": "iPlanetDirectoryPro=" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.classic.com:8080" + } + ], + "headersSize": 568, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "http://openam-frodo-dev.classic.com:8080/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33585, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"296916566\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"764229896\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1484382943\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"419010643\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"390387834\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"745481489\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"733279755\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "transfer-encoding", + "value": "chunked" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 18:32:56 GMT" + }, + { + "name": "keep-alive", + "value": "timeout=20" + }, + { + "name": "connection", + "value": "keep-alive" + } + ], + "headersSize": 499, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T18:32:56.128Z", + "time": 14, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 14 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/config_603940551/export_4211608755/0_all-separate_no-metadata_default_directory_include-active-values_use-string-arrays_no-d_3478583872/am_1076162899/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/0_all-separate_no-metadata_default_directory_include-active-values_use-string-arrays_no-d_3478583872/am_1076162899/recording.har index 899dc02b4..2bc5eaa66 100644 --- a/test/e2e/mocks/config_603940551/export_4211608755/0_all-separate_no-metadata_default_directory_include-active-values_use-string-arrays_no-d_3478583872/am_1076162899/recording.har +++ b/test/e2e/mocks/config_603940551/export_4211608755/0_all-separate_no-metadata_default_directory_include-active-values_use-string-arrays_no-d_3478583872/am_1076162899/recording.har @@ -7,6 +7,142 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ff404a7f-23a1-4b5e-9102-c2c8317a1df4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "cookie", + "value": "iPlanetDirectoryPro=" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.classic.com:8080" + } + ], + "headersSize": 568, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "http://openam-frodo-dev.classic.com:8080/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33585, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"296916566\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"764229896\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1484382943\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"419010643\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"390387834\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"745481489\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"733279755\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "transfer-encoding", + "value": "chunked" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 18:32:56 GMT" + }, + { + "name": "keep-alive", + "value": "timeout=20" + }, + { + "name": "connection", + "value": "keep-alive" + } + ], + "headersSize": 499, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T18:32:56.128Z", + "time": 14, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 14 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/config_603940551/export_4211608755/0_all-separate_read-only_no-metadata_default_directory_use-string-arrays_no-decode_no-coor_704286454/am_1076162899/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/0_all-separate_read-only_no-metadata_default_directory_use-string-arrays_no-decode_no-coor_704286454/am_1076162899/recording.har index 94caf14f6..2ae3106ba 100644 --- a/test/e2e/mocks/config_603940551/export_4211608755/0_all-separate_read-only_no-metadata_default_directory_use-string-arrays_no-decode_no-coor_704286454/am_1076162899/recording.har +++ b/test/e2e/mocks/config_603940551/export_4211608755/0_all-separate_read-only_no-metadata_default_directory_use-string-arrays_no-decode_no-coor_704286454/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/config_603940551/export_4211608755/0_all_file_use-string-arrays_no-decode_no-coords_2989867893/am_1076162899/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/0_all_file_use-string-arrays_no-decode_no-coords_2989867893/am_1076162899/recording.har index 9e12db030..e5741ea60 100644 --- a/test/e2e/mocks/config_603940551/export_4211608755/0_all_file_use-string-arrays_no-decode_no-coords_2989867893/am_1076162899/recording.har +++ b/test/e2e/mocks/config_603940551/export_4211608755/0_all_file_use-string-arrays_no-decode_no-coords_2989867893/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/config_603940551/export_4211608755/0_all_read-only_file_include-active-values_use-string-arrays_no-decode_no-coords_type_2984323863/am_1076162899/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/0_all_read-only_file_include-active-values_use-string-arrays_no-decode_no-coords_type_2984323863/am_1076162899/recording.har index 36a3bc06e..33537e8eb 100644 --- a/test/e2e/mocks/config_603940551/export_4211608755/0_all_read-only_file_include-active-values_use-string-arrays_no-decode_no-coords_type_2984323863/am_1076162899/recording.har +++ b/test/e2e/mocks/config_603940551/export_4211608755/0_all_read-only_file_include-active-values_use-string-arrays_no-decode_no-coords_type_2984323863/am_1076162899/recording.har @@ -7,6 +7,142 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ff404a7f-23a1-4b5e-9102-c2c8317a1df4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "cookie", + "value": "iPlanetDirectoryPro=" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.classic.com:8080" + } + ], + "headersSize": 568, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "http://openam-frodo-dev.classic.com:8080/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33585, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"296916566\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"764229896\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1484382943\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"419010643\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"390387834\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"745481489\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"733279755\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "transfer-encoding", + "value": "chunked" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 18:32:56 GMT" + }, + { + "name": "keep-alive", + "value": "timeout=20" + }, + { + "name": "connection", + "value": "keep-alive" + } + ], + "headersSize": 499, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T18:32:56.128Z", + "time": 14, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 14 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/config_603940551/export_4211608755/0_gAD_515851240/am_1076162899/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/0_gAD_515851240/am_1076162899/recording.har index 260b80d2f..d78c23d48 100644 --- a/test/e2e/mocks/config_603940551/export_4211608755/0_gAD_515851240/am_1076162899/recording.har +++ b/test/e2e/mocks/config_603940551/export_4211608755/0_gAD_515851240/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/config_603940551/export_4211608755/0_global-only_af_m_3851461146/am_1076162899/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/0_global-only_af_m_3851461146/am_1076162899/recording.har index c68d87827..222da1404 100644 --- a/test/e2e/mocks/config_603940551/export_4211608755/0_global-only_af_m_3851461146/am_1076162899/recording.har +++ b/test/e2e/mocks/config_603940551/export_4211608755/0_global-only_af_m_3851461146/am_1076162899/recording.har @@ -7,6 +7,142 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ff404a7f-23a1-4b5e-9102-c2c8317a1df4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "cookie", + "value": "iPlanetDirectoryPro=" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.classic.com:8080" + } + ], + "headersSize": 568, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "http://openam-frodo-dev.classic.com:8080/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33585, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"296916566\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"764229896\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1484382943\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"419010643\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"390387834\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"745481489\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"733279755\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "transfer-encoding", + "value": "chunked" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 18:32:56 GMT" + }, + { + "name": "keep-alive", + "value": "timeout=20" + }, + { + "name": "connection", + "value": "keep-alive" + } + ], + "headersSize": 499, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T18:32:56.128Z", + "time": 14, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 14 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/am_1076162899/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/am_1076162899/recording.har deleted file mode 100644 index 79f06de71..000000000 --- a/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/am_1076162899/recording.har +++ /dev/null @@ -1,54776 +0,0 @@ -{ - "log": { - "_recordingName": "config/export/after/am", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.6" - }, - "entries": [ - { - "_id": "ccd7a5defd0fdeaa986a2b54642d911a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "resource=1.1" - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 385, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" - }, - "response": { - "bodySize": 553, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 553, - "text": "{\"_id\":\"*\",\"_rev\":\"1874515102\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "resource=1.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1874515102\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "553" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:56 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:56.734Z", - "time": 252, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 252 - } - }, - { - "_id": "6125d0328ad0dcaee55f73fd8b22ca14", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1956, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" - }, - "response": { - "bodySize": 278, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 278, - "text": "{\"_id\":\"version\",\"_rev\":\"655405166\",\"version\":\"7.6.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 7.6.0-SNAPSHOT Build 7f4ea476ca0afb4f4ff6ae80b66d8c258ec64ba3 (2024-October-09 14:42)\",\"revision\":\"7f4ea476ca0afb4f4ff6ae80b66d8c258ec64ba3\",\"date\":\"2024-October-09 14:42\"}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"655405166\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "278" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.135Z", - "time": 71, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 71 - } - }, - { - "_id": "406a87e40f6891af8895783688a2e75f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1998, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/global-config/services?_action=nextdescendents" - }, - "response": { - "bodySize": 244, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 244, - "text": "{\"result\":[{\"enabled\":true,\"_id\":\"CorsService\",\"_type\":{\"_id\":\"CorsService\",\"name\":\"CORS Service\",\"collection\":false}},{\"defaults\":{\"assignedDashboard\":[]},\"_id\":\"dashboard\",\"_type\":{\"_id\":\"dashboard\",\"name\":\"Dashboard\",\"collection\":false}}]}" - }, - "cookies": [], - "headers": [ - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000;includeSubDomains;preload" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 283, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:58.599Z", - "time": 41, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 41 - } - }, - { - "_id": "6e9f4a3db5276a905f64721fd0d25c74", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1985, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/global-config/services/CorsService" - }, - "response": { - "bodySize": 115, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 115, - "text": "{\"_id\":\"\",\"_rev\":\"515901845\",\"enabled\":true,\"_type\":{\"_id\":\"CorsService\",\"name\":\"CORS Service\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"515901845\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "115" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:58.646Z", - "time": 164, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 164 - } - }, - { - "_id": "e21bee8936054ebf9dfa3f15fb875020", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2010, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/global-config/services/CorsService?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:58.648Z", - "time": 164, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 164 - } - }, - { - "_id": "c8ece482df2efe492b3d6c57c92ad401", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1983, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/global-config/services/dashboard" - }, - "response": { - "bodySize": 131, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 131, - "text": "{\"_id\":\"\",\"_rev\":\"436796111\",\"defaults\":{\"assignedDashboard\":[]},\"_type\":{\"_id\":\"dashboard\",\"name\":\"Dashboard\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"436796111\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "131" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:58.649Z", - "time": 163, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 163 - } - }, - { - "_id": "eb0e5454ddea193be131d95275fa0f60", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2008, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/global-config/services/dashboard?_action=nextdescendents" - }, - "response": { - "bodySize": 797, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 797, - "text": "{\"result\":[{\"icfIdentifier\":\"idm magic 34\",\"login\":\"http://www.google.com\",\"className\":\"SAML2ApplicationClass\",\"displayName\":\"Google\",\"name\":\"Google\",\"icon\":\"images/logos/googleplus.png\",\"_id\":\"Google\",\"_type\":{\"_id\":\"instances\",\"name\":\"instance\",\"collection\":true}},{\"icfIdentifier\":\"idm magic 12\",\"login\":\"http://www.salesforce.com\",\"className\":\"SAML2ApplicationClass\",\"displayName\":\"SalesForce\",\"name\":\"SalesForce\",\"icon\":\"images/logos/salesforce.png\",\"_id\":\"SalesForce\",\"_type\":{\"_id\":\"instances\",\"name\":\"instance\",\"collection\":true}},{\"icfIdentifier\":\"idm magic 56\",\"login\":\"http://www.ZenDesk.com\",\"className\":\"SAML2ApplicationClass\",\"displayName\":\"ZenDesk\",\"name\":\"ZenDesk\",\"icon\":\"images/logos/zendesk.png\",\"_id\":\"ZenDesk\",\"_type\":{\"_id\":\"instances\",\"name\":\"instance\",\"collection\":true}}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "797" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 766, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:58.650Z", - "time": 167, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 167 - } - }, - { - "_id": "7d9f50fd3e71cc96665ebde586994b01", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1990, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/global-config/realms/?_queryFilter=true" - }, - "response": { - "bodySize": 331, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 331, - "text": "{\"result\":[{\"_id\":\"L2FscGhh\",\"_rev\":\"362268810\",\"parentPath\":\"/\",\"active\":true,\"name\":\"alpha\",\"aliases\":[]},{\"_id\":\"L2JyYXZv\",\"_rev\":\"480875699\",\"parentPath\":\"/\",\"active\":true,\"name\":\"bravo\",\"aliases\":[]}],\"resultCount\":2,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.0,resource=1.0, resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:59 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 800, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:59.849Z", - "time": 269, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 269 - } - }, - { - "_id": "eb07c39a2f03451c75c1549e43dd0b24", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2012, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/saml2?_queryFilter=true" - }, - "response": { - "bodySize": 413, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 413, - "text": "{\"result\":[{\"_id\":\"aVNQQXp1cmU\",\"_rev\":\"2065843986\",\"entityId\":\"iSPAzure\",\"location\":\"hosted\",\"roles\":[\"serviceProvider\"]},{\"_id\":\"dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l\",\"_rev\":\"-1154647349\",\"entityId\":\"urn:federation:MicrosoftOnline\",\"location\":\"remote\",\"roles\":[\"serviceProvider\"]}],\"resultCount\":2,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":2,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0, resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "413" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:00 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 793, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:00.123Z", - "time": 80, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 80 - } - }, - { - "_id": "82104800ae170088dd91a8493364f1c4", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2013, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/saml2/hosted/aVNQQXp1cmU" - }, - "response": { - "bodySize": 3991, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 3991, - "text": "{\"_id\":\"aVNQQXp1cmU\",\"_rev\":\"-1533212691\",\"entityId\":\"iSPAzure\",\"serviceProvider\":{\"assertionContent\":{\"signingAndEncryption\":{\"requestResponseSigning\":{},\"encryption\":{},\"secretIdAndAlgorithms\":{}},\"nameIdFormat\":{\"nameIdFormatList\":[\"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\",\"urn:oasis:names:tc:SAML:2.0:nameid-format:transient\",\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\",\"urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified\",\"urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName\",\"urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos\",\"urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName\"]},\"authenticationContext\":{\"authenticationContextMapper\":\"com.sun.identity.saml2.plugins.DefaultSPAuthnContextMapper\",\"authContextItems\":[{\"contextReference\":\"urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport\",\"level\":0,\"defaultItem\":true}],\"authenticationComparisonType\":\"Exact\",\"includeRequestedAuthenticationContext\":true},\"assertionTimeSkew\":300,\"basicAuthentication\":{},\"clientAuthentication\":{}},\"assertionProcessing\":{\"attributeMapper\":{\"attributeMapper\":\"com.sun.identity.saml2.plugins.DefaultSPAttributeMapper\",\"attributeMap\":[{\"key\":\"http://schemas.microsoft.com/identity/claims/displayname\",\"value\":\"cn\"},{\"key\":\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname\",\"value\":\"givenName\"},{\"key\":\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname\",\"value\":\"sn\"},{\"key\":\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress\",\"value\":\"mail\"},{\"key\":\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name\",\"value\":\"uid\"}]},\"autoFederation\":{\"autoFedEnabled\":false},\"accountMapping\":{\"spAccountMapper\":\"com.sun.identity.saml2.plugins.DefaultSPAccountMapper\",\"useNameIDAsSPUserID\":true},\"responseArtifactMessageEncoding\":{\"encoding\":\"URI\"},\"url\":{},\"adapter\":{}},\"services\":{\"metaAlias\":\"/alpha/iSPAzure\",\"serviceAttributes\":{\"singleLogoutService\":[{\"binding\":\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\",\"location\":\"https://idc.scheuber.io/am/SPSloRedirect/metaAlias/alpha/iSPAzure\",\"responseLocation\":\"https://idc.scheuber.io/am/SPSloRedirect/metaAlias/alpha/iSPAzure\"},{\"binding\":\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\",\"location\":\"https://idc.scheuber.io/am/SPSloPOST/metaAlias/alpha/iSPAzure\",\"responseLocation\":\"https://idc.scheuber.io/am/SPSloPOST/metaAlias/alpha/iSPAzure\"},{\"binding\":\"urn:oasis:names:tc:SAML:2.0:bindings:SOAP\",\"location\":\"https://idc.scheuber.io/am/SPSloSoap/metaAlias/alpha/iSPAzure\"}],\"nameIdService\":[{\"binding\":\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\",\"location\":\"https://idc.scheuber.io/am/SPMniRedirect/metaAlias/alpha/iSPAzure\",\"responseLocation\":\"https://idc.scheuber.io/am/SPMniRedirect/metaAlias/alpha/iSPAzure\"},{\"binding\":\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\",\"location\":\"https://idc.scheuber.io/am/SPMniPOST/metaAlias/alpha/iSPAzure\",\"responseLocation\":\"https://idc.scheuber.io/am/SPMniPOST/metaAlias/alpha/iSPAzure\"},{\"binding\":\"urn:oasis:names:tc:SAML:2.0:bindings:SOAP\",\"location\":\"https://idc.scheuber.io/am/SPMniSoap/metaAlias/alpha/iSPAzure\",\"responseLocation\":\"https://idc.scheuber.io/am/SPMniSoap/metaAlias/alpha/iSPAzure\"}],\"assertionConsumerService\":[{\"isDefault\":true,\"binding\":\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact\",\"location\":\"https://idc.scheuber.io/am/AuthConsumer/metaAlias/alpha/iSPAzure\",\"index\":0},{\"isDefault\":false,\"binding\":\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\",\"location\":\"https://idc.scheuber.io/am/AuthConsumer/metaAlias/alpha/iSPAzure\",\"index\":1},{\"isDefault\":false,\"binding\":\"urn:oasis:names:tc:SAML:2.0:bindings:PAOS\",\"location\":\"https://idc.scheuber.io/am/Consumer/ECP/metaAlias/alpha/iSPAzure\",\"index\":2}]}},\"advanced\":{\"saeConfiguration\":{\"spUrl\":\"https://idc.scheuber.io/am/spsaehandler/metaAlias/alpha/iSPAzure\"},\"ecpConfiguration\":{\"ecpRequestIdpListFinderImpl\":\"com.sun.identity.saml2.plugins.ECPIDPFinder\"},\"idpProxy\":{},\"relayStateUrlList\":{}}}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1533212691\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "3991" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:00 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 788, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:00.208Z", - "time": 68, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 68 - } - }, - { - "_id": "336a6834a536ddb597cadc7ffa73b8be", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2042, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/saml2/remote/dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l" - }, - "response": { - "bodySize": 1581, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1581, - "text": "{\"_id\":\"dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l\",\"_rev\":\"1007701944\",\"entityId\":\"urn:federation:MicrosoftOnline\",\"serviceProvider\":{\"assertionContent\":{\"signingAndEncryption\":{\"requestResponseSigning\":{\"assertion\":true},\"encryption\":{},\"secretIdAndAlgorithms\":{}},\"nameIdFormat\":{\"nameIdFormatList\":[\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\",\"urn:mace:shibboleth:1.0:nameIdentifier\",\"urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified\",\"urn:oasis:names:tc:SAML:2.0:nameid-format:transient\",\"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\"]},\"secrets\":{},\"basicAuthentication\":{}},\"assertionProcessing\":{\"attributeMapper\":{\"attributeMap\":[{\"samlAttribute\":\"IDPEmail\",\"localAttribute\":\"mail\",\"binary\":false},{\"samlAttribute\":\"UOPClassID\",\"localAttribute\":\"UOPClassID\",\"binary\":false}]},\"accountMapper\":{},\"responseArtifactMessageEncoding\":{\"encoding\":\"URI\"}},\"services\":{\"serviceAttributes\":{\"singleLogoutService\":[{\"binding\":\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\",\"location\":\"https://login.microsoftonline.com/login.srf\"}],\"assertionConsumerService\":[{\"isDefault\":true,\"binding\":\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\",\"location\":\"https://login.microsoftonline.com/login.srf\",\"index\":0},{\"isDefault\":false,\"binding\":\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign\",\"location\":\"https://login.microsoftonline.com/login.srf\",\"index\":1},{\"isDefault\":false,\"binding\":\"urn:oasis:names:tc:SAML:2.0:bindings:PAOS\",\"location\":\"https://login.microsoftonline.com/login.srf\",\"index\":2}]}},\"advanced\":{\"saeConfiguration\":{},\"idpProxy\":{}}}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1007701944\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1581" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:00 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:00.335Z", - "time": 61, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 61 - } - }, - { - "_id": "a27e051c605355c6dfbe4dc7796c741c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2032, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/federation/circlesoftrust?_queryFilter=true" - }, - "response": { - "bodySize": 865, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 865, - "text": "{\"result\":[{\"_id\":\"2f04818d-561e-4f8a-82e8-af2426112138\",\"_rev\":\"-222749816\",\"trustedProviders\":[\"benefits-IDP|saml2\",\"iSPAzure|saml2\"],\"status\":\"active\",\"_type\":{\"_id\":\"circlesoftrust\",\"name\":\"Circle of Trust\",\"collection\":true}},{\"_id\":\"affiliation-test\",\"_rev\":\"838041851\",\"trustedProviders\":[],\"status\":\"active\",\"_type\":{\"_id\":\"circlesoftrust\",\"name\":\"Circle of Trust\",\"collection\":true}},{\"_id\":\"AzureCOT\",\"_rev\":\"-954827061\",\"trustedProviders\":[\"iSPAzure|saml2\",\"urn:federation:MicrosoftOnline|saml2\",\"https://sts.windows.net/711ffa9c-5972-4713-ace3-688c9732614a/|saml2\",\"SPAzure|saml2\",\"https://idc.scheuber.io/am/saml2/IDPAzure|saml2\"],\"status\":\"active\",\"_type\":{\"_id\":\"circlesoftrust\",\"name\":\"Circle of Trust\",\"collection\":true}}],\"resultCount\":3,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0, resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "865" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:00 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 793, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:00.457Z", - "time": 74, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 74 - } - }, - { - "_id": "9362a24f93ec5ea8e622101901b28a83", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2034, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/agents/IdentityGatewayAgent?_queryFilter=true" - }, - "response": { - "bodySize": 1847, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1847, - "text": "{\"result\":[{\"_id\":\"cdsso-ig-agent\",\"_rev\":\"-1524382492\",\"secretLabelIdentifier\":null,\"igCdssoLoginUrlTemplate\":null,\"igTokenIntrospection\":\"Realm_Subs\",\"status\":\"Active\",\"igCdssoRedirectUrls\":[\"https://volker-demo.encore.forgerock.com:443/apps/hrlite/redirect\",\"https://volker-demo.encore.forgerock.com/apps/hrlite/redirect\",\"https://volker-demo.encore.forgerock.com:443/apps/hrlite-rest/redirect\",\"https://volker-demo.encore.forgerock.com:443/apps/contractor/redirect\",\"https://volker-demo.encore.forgerock.com/apps/hrlite-rest/redirect\",\"https://volker-demo.encore.forgerock.com/apps/contractor/redirect\"],\"agentgroup\":null,\"_type\":{\"_id\":\"IdentityGatewayAgent\",\"name\":\"Identity Gateway Agents\",\"collection\":true}},{\"_id\":\"ig-agent\",\"_rev\":\"-1566320906\",\"secretLabelIdentifier\":null,\"igCdssoLoginUrlTemplate\":null,\"igTokenIntrospection\":\"Realm_Subs\",\"status\":\"Active\",\"igCdssoRedirectUrls\":[],\"agentgroup\":null,\"_type\":{\"_id\":\"IdentityGatewayAgent\",\"name\":\"Identity Gateway Agents\",\"collection\":true}},{\"_id\":\"frodo-test-ig-agent2\",\"_rev\":\"1365023305\",\"secretLabelIdentifier\":null,\"igCdssoLoginUrlTemplate\":\"http://testurl.com:8080/frodo\",\"igTokenIntrospection\":\"Realm\",\"status\":\"Inactive\",\"igCdssoRedirectUrls\":[\"http://testurl.com:8080/frodo\"],\"agentgroup\":null,\"_type\":{\"_id\":\"IdentityGatewayAgent\",\"name\":\"Identity Gateway Agents\",\"collection\":true}},{\"_id\":\"frodo-test-ig-agent\",\"_rev\":\"-1490423122\",\"secretLabelIdentifier\":null,\"igCdssoLoginUrlTemplate\":\"http://testurl.com:8080/frodo\",\"igTokenIntrospection\":\"Realm\",\"status\":\"Inactive\",\"igCdssoRedirectUrls\":[\"http://testurl.com:8080/frodo\"],\"agentgroup\":\"test_ig_group\",\"_type\":{\"_id\":\"IdentityGatewayAgent\",\"name\":\"Identity Gateway Agents\",\"collection\":true}}],\"resultCount\":4,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":4,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0, resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1847" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:00 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 794, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:00.540Z", - "time": 90, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 90 - } - }, - { - "_id": "f41259a4eadb375c91e01113418a4d25", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2023, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/agents/J2EEAgent?_queryFilter=true" - }, - "response": { - "bodySize": 10677, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 10677, - "text": "{\"result\":[{\"_id\":\"frodo-test-java-agent\",\"_rev\":\"1131793354\",\"ssoJ2EEAgentConfig\":{\"encodeCookies\":false,\"authExchangeUri\":null,\"cookieResetDomains\":{},\"authExchangeCookieName\":null,\"setCookieInternalMap\":{},\"excludedUserAgentsList\":[],\"cdssoRedirectUri\":\"/agent/post-authn-redirect\",\"cdssoSecureCookies\":false,\"cookieResetPaths\":{},\"acceptSsoTokenEnabled\":false,\"acceptSsoTokenDomainList\":[\"\"],\"cdssoDomainList\":[\"\"],\"setCookieAttributeMap\":{},\"cookieResetEnabled\":false,\"cookieResetNames\":[\"\"],\"acceptIPDPCookie\":false,\"httpOnly\":true},\"amServicesJ2EEAgent\":{\"urlPolicyEnvPostParameters\":[\"\"],\"policyEvaluationRealm\":\"/\",\"authServiceHost\":\"testurl.com\",\"policyNotifications\":true,\"conditionalLoginUrl\":[\"\"],\"customLoginEnabled\":false,\"legacyLoginUrlList\":[\"\"],\"agentAdviceEncode\":false,\"authServicePort\":8080,\"urlPolicyEnvGetParameters\":[\"\"],\"restrictToRealm\":{},\"urlPolicyEnvJsessionParameters\":[\"\"],\"amLoginUrl\":[],\"conditionalLogoutUrl\":[\"\"],\"authServiceProtocol\":\"http\",\"policyEvaluationApplication\":\"iPlanetAMWebAgentService\",\"authSuccessRedirectUrl\":false,\"strategyWhenAMUnavailable\":\"EVAL_NER_USE_CACHE_UNTIL_EXPIRED_ELSE_503\",\"overridePolicyEvaluationRealmEnabled\":false},\"applicationJ2EEAgentConfig\":{\"profileAttributeFetchMode\":\"NONE\",\"notEnforcedUris\":[\"\"],\"logoutIntrospection\":false,\"notEnforcedIpsCacheEnabled\":true,\"invertNotEnforcedUris\":false,\"cookieAttributeUrlEncoded\":true,\"cookieAttributeMultiValueSeparator\":\"|\",\"notEnforcedRuleCompoundSeparator\":\"|\",\"logoutRequestParameters\":{},\"resourceAccessDeniedUri\":{},\"continuousSecurityCookies\":{},\"notEnforcedUrisCacheEnabled\":true,\"responseAttributeFetchMode\":\"NONE\",\"headerAttributeDateFormat\":\"EEE, d MMM yyyy hh:mm:ss z\",\"profileAttributeMap\":{},\"sessionAttributeFetchMode\":\"NONE\",\"continuousSecurityHeaders\":{},\"responseAttributeMap\":{},\"notEnforcedUrisCacheSize\":1000,\"invertNotEnforcedIps\":false,\"sessionAttributeMap\":{},\"clientIpValidationRange\":{},\"notEnforcedIpsCacheSize\":1000,\"clientIpValidationMode\":{\"\":\"OFF\"},\"notEnforcedFavicon\":true,\"logoutEntryUri\":{},\"notEnforcedIps\":[\"\"],\"applicationLogoutUris\":{}},\"globalJ2EEAgentConfig\":{\"userTokenName\":\"UserToken\",\"secretLabelIdentifier\":null,\"fqdnDefault\":\"testurl.com\",\"recheckAmUnavailabilityInSeconds\":5,\"httpSessionBinding\":true,\"webSocketConnectionIntervalInMinutes\":30,\"localAuditLogRotation\":false,\"filterMode\":{\"\":\"ALL\"},\"debugLogfileRotationSize\":52428800,\"status\":\"Inactive\",\"debugLevel\":\"error\",\"lbCookieName\":\"amlbcookie\",\"auditLogLocation\":\"REMOTE\",\"lbCookieEnabled\":false,\"userPrincipalFlag\":false,\"fqdnCheck\":false,\"preAuthCookieMaxAge\":300,\"localAuditRotationSize\":52428800,\"fqdnMapping\":{},\"debugLogfileRotationMinutes\":-1,\"loginAttemptLimit\":0,\"auditAccessType\":\"LOG_NONE\",\"debugLogfileRetentionCount\":-1,\"redirectAttemptLimitCookieName\":\"amFilterRDParam\",\"configurationReloadInterval\":0,\"agentgroup\":null,\"debugLogfileSuffix\":\"-yyyy.MM.dd-HH.mm.ss\",\"userAttributeName\":\"employeenumber\",\"localAuditLogfileRetentionCount\":-1,\"customResponseHeader\":{},\"redirectAttemptLimit\":0,\"userMappingMode\":\"USER_ID\",\"jwtName\":\"am-auth-jwt\",\"repositoryLocation\":\"centralized\",\"loginAttemptLimitCookieName\":\"amFilterParam\",\"cdssoRootUrl\":[\"agentRootURL=http://testurl.com:8080/\"],\"agentConfigChangeNotificationsEnabled\":true,\"debugLogfilePrefix\":null,\"preAuthCookieName\":\"amFilterCDSSORequest\"},\"advancedJ2EEAgentConfig\":{\"postDataStickySessionKeyValue\":null,\"xssDetectionRedirectUri\":{},\"postDataCacheTtlMin\":5,\"jwtCacheSize\":5000,\"postDataPreservation\":false,\"policyCacheSize\":5000,\"postDataPreserveCacheEntryMaxEntries\":1000,\"postDataPreserveCacheEntryMaxTotalSizeMb\":-1,\"ssoExchangeCacheSize\":100,\"sessionCacheTTL\":15,\"idleTimeRefreshWindow\":1,\"ssoExchangeCacheTTL\":5,\"possibleXssCodeElements\":[\"\"],\"alternativeAgentPort\":null,\"policyClientPollingInterval\":3,\"missingPostDataPreservationEntryUri\":[\"\"],\"alternativeAgentProtocol\":null,\"clientIpHeader\":null,\"retainPreviousOverrideBehavior\":true,\"postDataPreserveMultipartLimitBytes\":104857600,\"jwtCacheTTL\":30,\"customProperties\":[],\"policyCachePerUser\":50,\"expiredSessionCacheTTL\":20,\"fragmentRelayUri\":null,\"postDataStickySessionMode\":\"URL\",\"alternativeAgentHostname\":null,\"expiredSessionCacheSize\":500,\"clientHostnameHeader\":null,\"monitoringToCSV\":false,\"postDataPreserveMultipartParameterLimitBytes\":104857600},\"miscJ2EEAgentConfig\":{\"legacyUserAgentList\":[\"Mozilla/4.7*\"],\"loginReasonMap\":{},\"authFailReasonParameterRemapper\":{},\"agent302RedirectStatusCode\":200,\"loginReasonParameterName\":null,\"gotoUrl\":null,\"localeLanguage\":\"en\",\"authFailReasonParameterName\":null,\"unwantedHttpUrlParams\":[\"\"],\"agent302RedirectContentType\":\"application/json\",\"agent302RedirectEnabled\":true,\"legacyUserAgentSupport\":false,\"wantedHttpUrlParams\":[\"\"],\"agent302RedirectInvertEnabled\":false,\"ignorePathInfo\":false,\"wantedHttpUrlRegexParams\":[\"\"],\"localeCountry\":\"US\",\"agent302RedirectHttpData\":\"{redirect:{requestUri:%REQUEST_URI%,requestUrl:%REQUEST_URL%,targetUrl:%TARGET%}}\",\"agent302RedirectNerList\":[\"\"],\"legacyRedirectUri\":\"/agent/sunwLegacySupportURI\",\"portCheckFile\":\"PortCheckContent.txt\",\"authFailReasonUrl\":null,\"gotoParameterName\":\"goto\",\"portCheckSetting\":{\"8080\":\"http\"},\"unwantedHttpUrlRegexParams\":[\"\"],\"portCheckEnabled\":false},\"_type\":{\"_id\":\"J2EEAgent\",\"name\":\"J2EE Agents\",\"collection\":true}},{\"_id\":\"frodo-test-java-agent2\",\"_rev\":\"561894916\",\"ssoJ2EEAgentConfig\":{\"encodeCookies\":false,\"authExchangeUri\":null,\"cookieResetDomains\":{},\"authExchangeCookieName\":null,\"setCookieInternalMap\":{},\"excludedUserAgentsList\":[],\"cdssoRedirectUri\":\"/agent/post-authn-redirect\",\"cdssoSecureCookies\":false,\"cookieResetPaths\":{},\"acceptSsoTokenEnabled\":false,\"acceptSsoTokenDomainList\":[\"\"],\"cdssoDomainList\":[\"\"],\"setCookieAttributeMap\":{},\"cookieResetEnabled\":false,\"cookieResetNames\":[\"\"],\"acceptIPDPCookie\":false,\"httpOnly\":true},\"amServicesJ2EEAgent\":{\"urlPolicyEnvPostParameters\":[\"\"],\"policyEvaluationRealm\":\"/\",\"authServiceHost\":\"testurl.com\",\"policyNotifications\":true,\"conditionalLoginUrl\":[\"\"],\"customLoginEnabled\":false,\"legacyLoginUrlList\":[\"\"],\"agentAdviceEncode\":false,\"authServicePort\":8080,\"urlPolicyEnvGetParameters\":[\"\"],\"restrictToRealm\":{},\"urlPolicyEnvJsessionParameters\":[\"\"],\"amLoginUrl\":[],\"conditionalLogoutUrl\":[\"\"],\"authServiceProtocol\":\"http\",\"policyEvaluationApplication\":\"iPlanetAMWebAgentService\",\"authSuccessRedirectUrl\":false,\"strategyWhenAMUnavailable\":\"EVAL_NER_USE_CACHE_UNTIL_EXPIRED_ELSE_503\",\"overridePolicyEvaluationRealmEnabled\":false},\"applicationJ2EEAgentConfig\":{\"profileAttributeFetchMode\":\"NONE\",\"notEnforcedUris\":[\"\"],\"logoutIntrospection\":false,\"notEnforcedIpsCacheEnabled\":true,\"invertNotEnforcedUris\":false,\"cookieAttributeUrlEncoded\":true,\"cookieAttributeMultiValueSeparator\":\"|\",\"notEnforcedRuleCompoundSeparator\":\"|\",\"logoutRequestParameters\":{},\"resourceAccessDeniedUri\":{},\"continuousSecurityCookies\":{},\"notEnforcedUrisCacheEnabled\":true,\"responseAttributeFetchMode\":\"NONE\",\"headerAttributeDateFormat\":\"EEE, d MMM yyyy hh:mm:ss z\",\"profileAttributeMap\":{},\"sessionAttributeFetchMode\":\"NONE\",\"continuousSecurityHeaders\":{},\"responseAttributeMap\":{},\"notEnforcedUrisCacheSize\":1000,\"invertNotEnforcedIps\":false,\"sessionAttributeMap\":{},\"clientIpValidationRange\":{},\"notEnforcedIpsCacheSize\":1000,\"clientIpValidationMode\":{\"\":\"OFF\"},\"notEnforcedFavicon\":true,\"logoutEntryUri\":{},\"notEnforcedIps\":[\"\"],\"applicationLogoutUris\":{}},\"globalJ2EEAgentConfig\":{\"userTokenName\":\"UserToken\",\"secretLabelIdentifier\":null,\"fqdnDefault\":\"testurl.com\",\"recheckAmUnavailabilityInSeconds\":5,\"httpSessionBinding\":true,\"webSocketConnectionIntervalInMinutes\":30,\"localAuditLogRotation\":false,\"filterMode\":{\"\":\"ALL\"},\"debugLogfileRotationSize\":52428800,\"status\":\"Inactive\",\"debugLevel\":\"error\",\"lbCookieName\":\"amlbcookie\",\"auditLogLocation\":\"REMOTE\",\"lbCookieEnabled\":false,\"userPrincipalFlag\":false,\"fqdnCheck\":false,\"preAuthCookieMaxAge\":300,\"localAuditRotationSize\":52428800,\"fqdnMapping\":{},\"debugLogfileRotationMinutes\":-1,\"loginAttemptLimit\":0,\"auditAccessType\":\"LOG_NONE\",\"debugLogfileRetentionCount\":-1,\"redirectAttemptLimitCookieName\":\"amFilterRDParam\",\"configurationReloadInterval\":0,\"agentgroup\":null,\"debugLogfileSuffix\":\"-yyyy.MM.dd-HH.mm.ss\",\"userAttributeName\":\"employeenumber\",\"localAuditLogfileRetentionCount\":-1,\"customResponseHeader\":{},\"redirectAttemptLimit\":0,\"userMappingMode\":\"USER_ID\",\"jwtName\":\"am-auth-jwt\",\"repositoryLocation\":\"centralized\",\"loginAttemptLimitCookieName\":\"amFilterParam\",\"cdssoRootUrl\":[\"agentRootURL=http://testurl.com:8080/\"],\"agentConfigChangeNotificationsEnabled\":true,\"debugLogfilePrefix\":null,\"preAuthCookieName\":\"amFilterCDSSORequest\"},\"advancedJ2EEAgentConfig\":{\"postDataStickySessionKeyValue\":null,\"xssDetectionRedirectUri\":{},\"postDataCacheTtlMin\":5,\"jwtCacheSize\":5000,\"postDataPreservation\":false,\"policyCacheSize\":5000,\"postDataPreserveCacheEntryMaxEntries\":1000,\"postDataPreserveCacheEntryMaxTotalSizeMb\":-1,\"ssoExchangeCacheSize\":100,\"sessionCacheTTL\":15,\"idleTimeRefreshWindow\":1,\"ssoExchangeCacheTTL\":5,\"possibleXssCodeElements\":[\"\"],\"alternativeAgentPort\":null,\"policyClientPollingInterval\":3,\"missingPostDataPreservationEntryUri\":[\"\"],\"alternativeAgentProtocol\":null,\"clientIpHeader\":null,\"retainPreviousOverrideBehavior\":true,\"postDataPreserveMultipartLimitBytes\":104857600,\"jwtCacheTTL\":30,\"customProperties\":[],\"policyCachePerUser\":50,\"expiredSessionCacheTTL\":20,\"fragmentRelayUri\":null,\"postDataStickySessionMode\":\"URL\",\"alternativeAgentHostname\":null,\"expiredSessionCacheSize\":500,\"clientHostnameHeader\":null,\"monitoringToCSV\":false,\"postDataPreserveMultipartParameterLimitBytes\":104857600},\"miscJ2EEAgentConfig\":{\"legacyUserAgentList\":[\"Mozilla/4.7*\"],\"loginReasonMap\":{},\"authFailReasonParameterRemapper\":{},\"agent302RedirectStatusCode\":200,\"loginReasonParameterName\":null,\"gotoUrl\":null,\"localeLanguage\":\"en\",\"authFailReasonParameterName\":null,\"unwantedHttpUrlParams\":[\"\"],\"agent302RedirectContentType\":\"application/json\",\"agent302RedirectEnabled\":true,\"legacyUserAgentSupport\":false,\"wantedHttpUrlParams\":[\"\"],\"agent302RedirectInvertEnabled\":false,\"ignorePathInfo\":false,\"wantedHttpUrlRegexParams\":[\"\"],\"localeCountry\":\"US\",\"agent302RedirectHttpData\":\"{redirect:{requestUri:%REQUEST_URI%,requestUrl:%REQUEST_URL%,targetUrl:%TARGET%}}\",\"agent302RedirectNerList\":[\"\"],\"legacyRedirectUri\":\"/agent/sunwLegacySupportURI\",\"portCheckFile\":\"PortCheckContent.txt\",\"authFailReasonUrl\":null,\"gotoParameterName\":\"goto\",\"portCheckSetting\":{\"8080\":\"http\"},\"unwantedHttpUrlRegexParams\":[\"\"],\"portCheckEnabled\":false},\"_type\":{\"_id\":\"J2EEAgent\",\"name\":\"J2EE Agents\",\"collection\":true}}],\"resultCount\":2,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":2,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0, resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:00 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 800, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:00.546Z", - "time": 93, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 93 - } - }, - { - "_id": "a3eb0ad597450c61df00537b21750233", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2022, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/agents/WebAgent?_queryFilter=true" - }, - "response": { - "bodySize": 7320, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 7320, - "text": "{\"result\":[{\"_id\":\"frodo-test-web-agent2\",\"_rev\":\"930101313\",\"miscWebAgentConfig\":{\"anonymousUserId\":\"anonymous\",\"profileAttributesCookieMaxAge\":300,\"urlJsonResponse\":[\"\"],\"caseInsensitiveUrlComparison\":true,\"compositeAdviceRedirect\":false,\"compositeAdviceEncode\":false,\"addCacheControlHeader\":false,\"anonymousUserEnabled\":false,\"invalidUrlRegex\":null,\"ignorePathInfo\":false,\"invertUrlJsonResponse\":false,\"statusCodeJsonResponse\":202,\"headerJsonResponse\":{},\"encodeSpecialCharsInCookies\":false,\"gotoParameterName\":\"goto\",\"encodeUrlSpecialCharacters\":false,\"mineEncodeHeader\":0,\"profileAttributesCookiePrefix\":\"HTTP_\"},\"advancedWebAgentConfig\":{\"overrideRequestHost\":false,\"pdpSkipPostUrl\":[\"\"],\"pdpStickySessionValue\":null,\"postDataPreservation\":false,\"hostnameToIpAddress\":[],\"showPasswordInHeader\":false,\"overrideRequestProtocol\":false,\"clientIpHeader\":null,\"replayPasswordKey\":null,\"customProperties\":[],\"postDataCachePeriod\":10,\"retainSessionCache\":false,\"pdpJavascriptRepost\":false,\"pdpStickySessionMode\":\"OFF\",\"overrideRequestPort\":false,\"apacheAuthDirectives\":null,\"clientHostnameHeader\":null,\"fragmentRedirectEnabled\":false,\"pdpStickySessionCookieName\":null,\"logonAndImpersonation\":false},\"ssoWebAgentConfig\":{\"cookieResetList\":[\"\"],\"cdssoRedirectUri\":\"agent/cdsso-oauth2\",\"persistentJwtCookie\":false,\"acceptSsoToken\":false,\"secureCookies\":false,\"cookieResetOnRedirect\":false,\"sameSite\":null,\"cdssoCookieDomain\":[\"\"],\"cookieResetEnabled\":false,\"cookieName\":\"iPlanetDirectoryPro\",\"multivaluePreAuthnCookie\":false,\"httpOnly\":true},\"amServicesWebAgent\":{\"policyClockSkew\":0,\"enableLogoutRegex\":false,\"policyEvaluationRealm\":\"/\",\"fetchPoliciesFromRootResource\":false,\"logoutUrlRegex\":null,\"conditionalLoginUrl\":[\"\"],\"customLoginMode\":0,\"invalidateLogoutSession\":true,\"logoutResetCookies\":[\"\"],\"logoutRedirectUrl\":null,\"regexConditionalLoginUrl\":[\"\"],\"policyCachePollingInterval\":3,\"regexConditionalLoginPattern\":[\"\"],\"logoutRedirectDisabled\":false,\"retrieveClientHostname\":false,\"applicationLogoutUrls\":[\"\"],\"userIdParameterType\":\"session\",\"publicAmUrl\":null,\"userIdParameter\":\"UserToken\",\"amLoginUrl\":[],\"amLogoutUrl\":[\"http://testserverurl.com:8080/UI/Logout\"],\"policyEvaluationApplication\":\"iPlanetAMWebAgentService\",\"ssoCachePollingInterval\":3},\"applicationWebAgentConfig\":{\"profileAttributeFetchMode\":\"NONE\",\"clientIpValidation\":false,\"notEnforcedIpsRegex\":false,\"continuousSecurityCookies\":{},\"fetchAttributesForNotEnforcedUrls\":false,\"ignorePathInfoForNotEnforcedUrls\":true,\"responseAttributeFetchMode\":\"NONE\",\"attributeMultiValueSeparator\":\"|\",\"profileAttributeMap\":{},\"sessionAttributeFetchMode\":\"NONE\",\"continuousSecurityHeaders\":{},\"notEnforcedIpsList\":[\"\"],\"responseAttributeMap\":{},\"notEnforcedUrls\":[\"\"],\"sessionAttributeMap\":{},\"notEnforcedUrlsRegex\":false,\"invertNotEnforcedUrls\":false,\"notEnforcedIps\":[\"\"]},\"globalWebAgentConfig\":{\"agentDebugLevel\":\"Error\",\"secretLabelIdentifier\":null,\"fqdnDefault\":\"testagenturl.com\",\"webSocketConnectionIntervalInMinutes\":30,\"status\":\"Inactive\",\"configurationPollingInterval\":60,\"auditLogLocation\":\"REMOTE\",\"fqdnCheck\":false,\"amLbCookieEnable\":false,\"fqdnMapping\":{},\"accessDeniedUrl\":null,\"resetIdleTime\":false,\"auditAccessType\":\"LOG_NONE\",\"ssoOnlyMode\":false,\"agentgroup\":null,\"notificationsEnabled\":true,\"agentUriPrefix\":\"http://testagenturl.com:8080/amagent\",\"disableJwtAudit\":false,\"jwtName\":\"am-auth-jwt\",\"repositoryLocation\":\"centralized\",\"cdssoRootUrl\":[\"agentRootURL=http://testagenturl.com:8080/\"],\"agentConfigChangeNotificationsEnabled\":true,\"jwtAuditWhitelist\":null},\"_type\":{\"_id\":\"WebAgent\",\"name\":\"Web Agents\",\"collection\":true}},{\"_id\":\"frodo-test-web-agent\",\"_rev\":\"218393939\",\"miscWebAgentConfig\":{\"anonymousUserId\":\"anonymous\",\"profileAttributesCookieMaxAge\":300,\"urlJsonResponse\":[\"\"],\"caseInsensitiveUrlComparison\":true,\"compositeAdviceRedirect\":false,\"compositeAdviceEncode\":false,\"addCacheControlHeader\":false,\"anonymousUserEnabled\":false,\"invalidUrlRegex\":null,\"ignorePathInfo\":false,\"invertUrlJsonResponse\":false,\"statusCodeJsonResponse\":202,\"headerJsonResponse\":{},\"encodeSpecialCharsInCookies\":false,\"gotoParameterName\":\"goto\",\"encodeUrlSpecialCharacters\":false,\"mineEncodeHeader\":0,\"profileAttributesCookiePrefix\":\"HTTP_\"},\"advancedWebAgentConfig\":{\"overrideRequestHost\":false,\"pdpSkipPostUrl\":[\"\"],\"pdpStickySessionValue\":null,\"postDataPreservation\":false,\"hostnameToIpAddress\":[],\"showPasswordInHeader\":false,\"overrideRequestProtocol\":false,\"clientIpHeader\":null,\"replayPasswordKey\":null,\"customProperties\":[],\"postDataCachePeriod\":10,\"retainSessionCache\":false,\"pdpJavascriptRepost\":false,\"pdpStickySessionMode\":\"OFF\",\"overrideRequestPort\":false,\"apacheAuthDirectives\":null,\"clientHostnameHeader\":null,\"fragmentRedirectEnabled\":false,\"pdpStickySessionCookieName\":null,\"logonAndImpersonation\":false},\"ssoWebAgentConfig\":{\"cookieResetList\":[\"\"],\"cdssoRedirectUri\":\"agent/cdsso-oauth2\",\"persistentJwtCookie\":false,\"acceptSsoToken\":false,\"secureCookies\":false,\"cookieResetOnRedirect\":false,\"sameSite\":null,\"cdssoCookieDomain\":[\"\"],\"cookieResetEnabled\":false,\"cookieName\":\"iPlanetDirectoryPro\",\"multivaluePreAuthnCookie\":false,\"httpOnly\":true},\"amServicesWebAgent\":{\"policyClockSkew\":0,\"enableLogoutRegex\":false,\"policyEvaluationRealm\":\"/\",\"fetchPoliciesFromRootResource\":false,\"logoutUrlRegex\":null,\"conditionalLoginUrl\":[\"\"],\"customLoginMode\":0,\"invalidateLogoutSession\":true,\"logoutResetCookies\":[\"\"],\"logoutRedirectUrl\":null,\"regexConditionalLoginUrl\":[\"\"],\"policyCachePollingInterval\":3,\"regexConditionalLoginPattern\":[\"\"],\"logoutRedirectDisabled\":false,\"retrieveClientHostname\":false,\"applicationLogoutUrls\":[\"\"],\"userIdParameterType\":\"session\",\"publicAmUrl\":null,\"userIdParameter\":\"UserToken\",\"amLoginUrl\":[],\"amLogoutUrl\":[\"http://testserverurl.com:8080/UI/Logout\"],\"policyEvaluationApplication\":\"iPlanetAMWebAgentService\",\"ssoCachePollingInterval\":3},\"applicationWebAgentConfig\":{\"profileAttributeFetchMode\":\"NONE\",\"clientIpValidation\":false,\"notEnforcedIpsRegex\":false,\"continuousSecurityCookies\":{},\"fetchAttributesForNotEnforcedUrls\":false,\"ignorePathInfoForNotEnforcedUrls\":true,\"responseAttributeFetchMode\":\"NONE\",\"attributeMultiValueSeparator\":\"|\",\"profileAttributeMap\":{},\"sessionAttributeFetchMode\":\"NONE\",\"continuousSecurityHeaders\":{},\"notEnforcedIpsList\":[\"\"],\"responseAttributeMap\":{},\"notEnforcedUrls\":[\"\"],\"sessionAttributeMap\":{},\"notEnforcedUrlsRegex\":false,\"invertNotEnforcedUrls\":false,\"notEnforcedIps\":[\"\"]},\"globalWebAgentConfig\":{\"agentDebugLevel\":\"Error\",\"secretLabelIdentifier\":null,\"fqdnDefault\":\"testagenturl.com\",\"webSocketConnectionIntervalInMinutes\":30,\"status\":\"Inactive\",\"configurationPollingInterval\":60,\"auditLogLocation\":\"REMOTE\",\"fqdnCheck\":false,\"amLbCookieEnable\":false,\"fqdnMapping\":{},\"accessDeniedUrl\":null,\"resetIdleTime\":false,\"auditAccessType\":\"LOG_NONE\",\"ssoOnlyMode\":false,\"agentgroup\":null,\"notificationsEnabled\":true,\"agentUriPrefix\":\"http://testagenturl.com:8080/amagent\",\"disableJwtAudit\":false,\"jwtName\":\"am-auth-jwt\",\"repositoryLocation\":\"centralized\",\"cdssoRootUrl\":[\"agentRootURL=http://testagenturl.com:8080/\"],\"agentConfigChangeNotificationsEnabled\":true,\"jwtAuditWhitelist\":null},\"_type\":{\"_id\":\"WebAgent\",\"name\":\"Web Agents\",\"collection\":true}}],\"resultCount\":2,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":2,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0, resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "7320" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:00 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 794, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:00.549Z", - "time": 97, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 97 - } - }, - { - "_id": "421cc0f8043f4ea4163d5d4b7693be98", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2008, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/oauth-oidc" - }, - "response": { - "bodySize": 8672, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 8672, - "text": "{\"_id\":\"\",\"_rev\":\"611625667\",\"advancedOIDCConfig\":{\"supportedRequestParameterEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"authorisedOpenIdConnectSSOClients\":[],\"supportedUserInfoEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"supportedAuthorizationResponseEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"supportedTokenIntrospectionResponseEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"useForceAuthnForPromptLogin\":false,\"useForceAuthnForMaxAge\":false,\"alwaysAddClaimsToToken\":true,\"supportedTokenIntrospectionResponseSigningAlgorithms\":[\"PS384\",\"RS384\",\"EdDSA\",\"ES384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedTokenEndpointAuthenticationSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedRequestParameterSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"includeAllKtyAlgCombinationsInJwksUri\":false,\"amrMappings\":{},\"loaMapping\":{},\"authorisedIdmDelegationClients\":[],\"idTokenInfoClientAuthenticationEnabled\":true,\"storeOpsTokens\":true,\"supportedUserInfoSigningAlgorithms\":[\"ES384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\"],\"supportedAuthorizationResponseSigningAlgorithms\":[\"PS384\",\"RS384\",\"EdDSA\",\"ES384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedUserInfoEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"claimsParameterSupported\":false,\"supportedTokenIntrospectionResponseEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"supportedAuthorizationResponseEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"supportedRequestParameterEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"ECDH-ES+A128KW\",\"RSA-OAEP\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"defaultACR\":[]},\"advancedOAuth2Config\":{\"passwordGrantAuthService\":\"Login\",\"includeClientIdClaimInStatelessTokens\":true,\"tokenCompressionEnabled\":false,\"tokenEncryptionEnabled\":false,\"requirePushedAuthorizationRequests\":false,\"tlsCertificateBoundAccessTokensEnabled\":true,\"includeSubnameInTokenClaims\":true,\"defaultScopes\":[\"address\",\"phone\",\"openid\",\"profile\",\"email\"],\"moduleMessageEnabledInPasswordGrant\":false,\"allowClientCredentialsInTokenRequestQueryParameters\":true,\"supportedSubjectTypes\":[\"public\",\"pairwise\"],\"refreshTokenGracePeriod\":0,\"tlsClientCertificateHeaderFormat\":\"URLENCODED_PEM\",\"hashSalt\":\"&{am.oidc.client.subject.identifier.hash.salt}\",\"macaroonTokenFormat\":\"V2\",\"maxAgeOfRequestObjectNbfClaim\":0,\"tlsCertificateRevocationCheckingEnabled\":false,\"nbfClaimRequiredInRequestObject\":false,\"requestObjectProcessing\":\"OIDC\",\"maxDifferenceBetweenRequestObjectNbfAndExp\":0,\"responseTypeClasses\":[\"code|org.forgerock.oauth2.core.AuthorizationCodeResponseTypeHandler\",\"device_code|org.forgerock.oauth2.core.TokenResponseTypeHandler\",\"token|org.forgerock.oauth2.core.TokenResponseTypeHandler\",\"id_token|org.forgerock.openidconnect.IdTokenResponseTypeHandler\"],\"expClaimRequiredInRequestObject\":false,\"tokenValidatorClasses\":[\"urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.idtoken.OidcIdTokenValidator\",\"urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.OAuth2AccessTokenValidator\"],\"tokenSigningAlgorithm\":\"HS256\",\"codeVerifierEnforced\":\"false\",\"displayNameAttribute\":\"cn\",\"tokenExchangeClasses\":[\"urn:ietf:params:oauth:token-type:access_token=>urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.AccessTokenToAccessTokenExchanger\",\"urn:ietf:params:oauth:token-type:id_token=>urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.idtoken.IdTokenToIdTokenExchanger\",\"urn:ietf:params:oauth:token-type:access_token=>urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.AccessTokenToIdTokenExchanger\",\"urn:ietf:params:oauth:token-type:id_token=>urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.idtoken.IdTokenToAccessTokenExchanger\"],\"parRequestUriLifetime\":90,\"allowedAudienceValues\":[],\"persistentClaims\":[],\"supportedScopes\":[\"email|Your email address\",\"openid|\",\"address|Your postal address\",\"phone|Your telephone number(s)\",\"profile|Your personal information\",\"fr:idm:*\",\"am-introspect-all-tokens\"],\"authenticationAttributes\":[\"uid\"],\"grantTypes\":[\"implicit\",\"urn:ietf:params:oauth:grant-type:saml2-bearer\",\"refresh_token\",\"password\",\"client_credentials\",\"urn:ietf:params:oauth:grant-type:device_code\",\"authorization_code\",\"urn:openid:params:grant-type:ciba\",\"urn:ietf:params:oauth:grant-type:uma-ticket\",\"urn:ietf:params:oauth:grant-type:jwt-bearer\"]},\"clientDynamicRegistrationConfig\":{\"dynamicClientRegistrationScope\":\"dynamic_client_registration\",\"allowDynamicRegistration\":false,\"requiredSoftwareStatementAttestedAttributes\":[\"redirect_uris\"],\"dynamicClientRegistrationSoftwareStatementRequired\":false,\"generateRegistrationAccessTokens\":true},\"coreOIDCConfig\":{\"overrideableOIDCClaims\":[],\"oidcDiscoveryEndpointEnabled\":true,\"supportedIDTokenEncryptionMethods\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"supportedClaims\":[],\"supportedIDTokenSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedIDTokenEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"jwtTokenLifetime\":3600},\"coreOAuth2Config\":{\"refreshTokenLifetime\":604800,\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenMayActScript\":\"[Empty]\",\"accessTokenLifetime\":3600,\"macaroonTokensEnabled\":false,\"codeLifetime\":120,\"statelessTokensEnabled\":true,\"usePolicyEngineForScope\":false,\"issueRefreshToken\":true,\"oidcMayActScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true},\"consent\":{\"supportedRcsRequestSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedRcsResponseEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"ECDH-ES+A128KW\",\"RSA-OAEP\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"supportedRcsRequestEncryptionMethods\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"enableRemoteConsent\":false,\"supportedRcsRequestEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"clientsCanSkipConsent\":true,\"supportedRcsResponseSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedRcsResponseEncryptionMethods\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"]},\"deviceCodeConfig\":{\"deviceUserCodeLength\":8,\"deviceCodeLifetime\":300,\"deviceUserCodeCharacterSet\":\"234567ACDEFGHJKLMNPQRSTWXYZabcdefhijkmnopqrstwxyz\",\"devicePollInterval\":5},\"pluginsConfig\":{\"evaluateScopeClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"validateScopeScript\":\"[Empty]\",\"accessTokenEnricherClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"oidcClaimsPluginType\":\"SCRIPTED\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"authorizeEndpointDataProviderPluginType\":\"JAVA\",\"userCodeGeneratorClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultUserCodeGenerator\",\"evaluateScopeScript\":\"[Empty]\",\"oidcClaimsClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"evaluateScopePluginType\":\"JAVA\",\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"accessTokenModifierClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"accessTokenModificationScript\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"validateScopePluginType\":\"JAVA\",\"accessTokenModificationPluginType\":\"SCRIPTED\",\"oidcClaimsScript\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"validateScopeClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\"},\"cibaConfig\":{\"cibaMinimumPollingInterval\":2,\"supportedCibaSigningAlgorithms\":[\"ES256\",\"PS256\"],\"cibaAuthReqIdLifetime\":600},\"_type\":{\"_id\":\"oauth-oidc\",\"name\":\"OAuth2 Provider\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"611625667\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:00 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 792, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:00.654Z", - "time": 67, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 67 - } - }, - { - "_id": "e42691e15f162646b837831b8444dd82", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2026, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/agents/OAuth2Client?_queryFilter=true" - }, - "response": { - "bodySize": 62581, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 62581, - "text": "{\"result\":[{\"_id\":\"EncoreRCSClient\",\"_rev\":\"-1430071664\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"pairwise\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"code\",\"token\",\"id_token\",\"code token\",\"token id_token\",\"code id_token\",\"code token id_token\",\"device_code\",\"device_code id_token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":false,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"client_credentials\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":0,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"status\":\"Active\",\"clientName\":[],\"clientType\":\"Confidential\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"refreshTokenLifetime\":0,\"scopes\":[\"fr:idm:*\"],\"accessTokenLifetime\":0,\"redirectionUris\":[],\"authorizationCodeLifetime\":0},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"hrlite-client\",\"_rev\":\"-778017687\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"oidcClaimsClass\":null,\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"accessTokenModifierClass\":null,\"customLoginUrlTemplate\":null,\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"Public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"code\",\"token\",\"id_token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[\"https://volker-demo.encore.forgerock.com\",\"https://volker-demo.encore.forgerock.com:443\",\"https://volker-demo.encore.forgerock.com\",\"https://volker-demo.encore.forgerock.com:443\"],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":true,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"authorization_code\",\"client_credentials\",\"refresh_token\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[\"hrlite/id_token/callback\"],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":3600,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"status\":\"Active\",\"clientName\":[],\"clientType\":\"Confidential\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"agentgroup\":null,\"refreshTokenLifetime\":604800,\"scopes\":[\"openid\",\"fr:idm:*\"],\"accessTokenLifetime\":3600,\"redirectionUris\":[\"https://volker-demo.encore.forgerock.com/apps/hrlite/id_token/callback\",\"https://volker-demo.encore.forgerock.com:443/apps/hrlite/id_token/callback\",\"https://volker-demo.encore.forgerock.com/apps/hrlite/id_token/callback\",\"https://volker-demo.encore.forgerock.com:443/apps/hrlite/id_token/callback\",\"https://volker-demo.encore.forgerock.com/apps/contractor/id_token/callback\",\"https://volker-demo.encore.forgerock.com:443/apps/contractor/id_token/callback\"],\"authorizationCodeLifetime\":120},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"testapp\",\"_rev\":\"916377869\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"oidcClaimsClass\":null,\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"customLoginUrlTemplate\":null,\"accessTokenModifierClass\":null,\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"code\",\"token\",\"id_token\",\"code token\",\"token id_token\",\"code id_token\",\"code token id_token\",\"device_code\",\"device_code id_token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"tosURI\":[],\"sectorIdentifierUri\":null,\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"refreshTokenGracePeriod\":0,\"isConsentImplied\":false,\"softwareIdentity\":null,\"grantTypes\":[\"authorization_code\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[\"Test Application\"],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"userinfoResponseFormat\":\"JSON\",\"mTLSCertificateBoundAccessTokens\":false,\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOAuth2ClientConfig\":{\"secretLabelIdentifier\":null,\"status\":\"Active\",\"clientName\":[\"testapp\"],\"clientType\":\"Confidential\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"agentgroup\":null,\"refreshTokenLifetime\":0,\"scopes\":[],\"accessTokenLifetime\":0,\"redirectionUris\":[],\"authorizationCodeLifetime\":0},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":0,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"60b7b032-68fc-45ed-98ca-262c1985fb7e\",\"_rev\":\"-114090658\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"Public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":true,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"client_credentials\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[\"Created by Frodo on 3/20/2024, 8:09:47 AM\"],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":3600,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"userpassword\":null,\"status\":\"Active\",\"clientName\":[\"60b7b032-68fc-45ed-98ca-262c1985fb7e\"],\"clientType\":\"Confidential\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[\"fr:idm:*\"],\"refreshTokenLifetime\":604800,\"scopes\":[\"fr:idm:*\",\"fr:idc:esv:*\",\"dynamic_client_registration\"],\"accessTokenLifetime\":315360000,\"redirectionUris\":[],\"authorizationCodeLifetime\":120},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"0b48992b-a2dd-4ed5-8b07-1fc5d7306da8\",\"_rev\":\"-1994175968\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"Public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":true,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"client_credentials\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[\"Created by Frodo on 3/20/2024, 9:30:37 AM\"],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":3600,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"userpassword\":null,\"status\":\"Active\",\"clientName\":[\"0b48992b-a2dd-4ed5-8b07-1fc5d7306da8\"],\"clientType\":\"Confidential\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[\"fr:idm:*\"],\"refreshTokenLifetime\":604800,\"scopes\":[\"fr:idm:*\",\"fr:idc:esv:*\",\"dynamic_client_registration\"],\"accessTokenLifetime\":315360000,\"redirectionUris\":[],\"authorizationCodeLifetime\":120},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"frodo-idm-access\",\"_rev\":\"1309399033\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"code\",\"token\",\"id_token\",\"code token\",\"token id_token\",\"code id_token\",\"code token id_token\",\"device_code\",\"device_code id_token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[\"http://localhost:8712\",\"https://openam-frodo-dev.forgeblocks.com\",\"https://openam-frodo-dev.forgeblocks.com:443\"],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_post\",\"isConsentImplied\":true,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"authorization_code\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[\"Frodo IDM Access\"],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOAuth2ClientConfig\":{\"secretLabelIdentifier\":null,\"status\":\"Active\",\"clientName\":[\"frodo-idm-access\"],\"clientType\":\"Public\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"refreshTokenLifetime\":604800,\"scopes\":[\"openid\",\"fr:idm:*\"],\"accessTokenLifetime\":3600,\"redirectionUris\":[\"http://localhost:8712/frodo\",\"https://openam-frodo-dev.forgeblocks.com/platform/appAuthHelperRedirect.html\"],\"authorizationCodeLifetime\":120},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":3600,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"RCSClient\",\"_rev\":\"-1061027698\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"1f389a3d-21cf-417c-a6d3-42ea620071f0\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"SCRIPTED\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"SCRIPTED\",\"providerOverridesEnabled\":true,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":true,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"oidcClaimsClass\":null,\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"accessTokenModifierClass\":null,\"customLoginUrlTemplate\":null,\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":true,\"accessTokenModificationScript\":\"c234ba0b-58a1-4cfd-9567-09edde980745\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"Public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"code\",\"token\",\"id_token\",\"code token\",\"token id_token\",\"code id_token\",\"code token id_token\",\"device_code\",\"device_code id_token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":false,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"client_credentials\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":\"http://am.fr-platform:80/am/oauth2/connect/jwk_uri\",\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":0,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"status\":\"Active\",\"clientName\":[],\"clientType\":\"Confidential\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"agentgroup\":null,\"refreshTokenLifetime\":0,\"scopes\":[\"fr:idm:*\"],\"accessTokenLifetime\":0,\"redirectionUris\":[],\"authorizationCodeLifetime\":0},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"EncoreWindowsRCSClient\",\"_rev\":\"-245014983\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"pairwise\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"code\",\"token\",\"id_token\",\"code token\",\"token id_token\",\"code id_token\",\"code token id_token\",\"device_code\",\"device_code id_token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":false,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"client_credentials\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":0,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"status\":\"Active\",\"clientName\":[],\"clientType\":\"Confidential\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"refreshTokenLifetime\":0,\"scopes\":[\"fr:idm:*\"],\"accessTokenLifetime\":0,\"redirectionUris\":[],\"authorizationCodeLifetime\":0},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"rfc7523-client1\",\"_rev\":\"-1045870735\",\"coreOAuth2ClientConfig\":{\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"refreshTokenLifetime\":604800,\"scopes\":[\"openid\",\"fr:am:*\",\"fr:idm:*\"],\"status\":\"Active\",\"accessTokenLifetime\":3600,\"redirectionUris\":[],\"clientName\":[\"rfc7523-client1\"],\"clientType\":\"Public\",\"authorizationCodeLifetime\":120},\"advancedOAuth2ClientConfig\":{\"descriptions\":[],\"requestUris\":[],\"logoUri\":[],\"subjectType\":\"Public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"name\":[],\"contacts\":[],\"responseTypes\":[\"token\"],\"updateAccessToken\":null,\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"none\",\"isConsentImplied\":true,\"softwareIdentity\":null,\"grantTypes\":[\"urn:ietf:params:oauth:grant-type:jwt-bearer\"]},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"jwkStoreCacheMissCacheTime\":60000,\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"mTLSTrustedCert\":null,\"jwkSet\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"5rpTrxBPGieY8tVMmxMq_m3ZBbrATN0SlikhoM13VJM\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"3oLso7E5tS9FL0ui5KaQe2qEsozeZAwqCHqzEP7KzgMAAvPCQHPZ8etsC9xeYxAyjPnfQc-EXMRqCHqlyxeyR912gBKYVZ6VB9h1zWKCIiUQHpY_nz6bDAt1EisRiH_jqENDOJ0m5ELVLPZoXcsEQ9e_yg352YToGvS560YCBi6xYj4JX5SGs0Rah-SmhpsOZNr46XHolGYivLaRNLJRQc2YV2NArMfb5JcDQ9aSv3EyIXOim7MRFh8uORCiyNpF_y3jOjC17rdJ_0IPnYvPl1-Krq283RzzhIDe2s2CoKAK50XEM8J5FT9298xd7ku1_nyCcNsltGPLj3a7p9OYzofaC8FIfBXX_T4MoNfJ0edNp3FWGin_C_l1z4JnKdSyyBMr4-mB0mIx3td2qK8StFj2hfXZXxtG4cJ0vnP4Qizse-BlqG0Wkmbjijun9cfPiL5AFv-W5OcfQ5R8HqU5JHkQGkWXopZpZtGbqCS7LbDyNBZJNa_qacAIZ98C4sbbRwZgv824hxJlVGu0uxyIqwNHyNnPkZ8zhJ9OCp2l4y8KC3aALyVlBzmi55xh4J8J1cgFXX2v_ilPqUYN9uwQAR4mJ6_tHEPzX7BPxFl1BubNyK5S1ZZevtbUUE8oV9an2fP51H64oYy_1ni6badcu0TOPr2ISGuwFvQxtllHRcE\\\"}]}\",\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"jwksUri\":null,\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"clientSessionUri\":null,\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":3600,\"defaultMaxAgeEnabled\":false,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"49a2981c-e192-4739-a0e6-c7582168bdf5\",\"_rev\":\"2145207361\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"oidcClaimsClass\":null,\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"accessTokenModifierClass\":null,\"customLoginUrlTemplate\":null,\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"Public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":true,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"client_credentials\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[\"Created by Frodo on 5/13/2023, 8:07:37 PM\"],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":3600,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"status\":\"Active\",\"clientName\":[\"49a2981c-e192-4739-a0e6-c7582168bdf5\"],\"clientType\":\"Confidential\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[\"fr:idm:*\"],\"agentgroup\":null,\"refreshTokenLifetime\":604800,\"scopes\":[\"fr:idm:*\",\"fr:idc:esv:*\",\"dynamic_client_registration\"],\"accessTokenLifetime\":3600,\"redirectionUris\":[],\"authorizationCodeLifetime\":120},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"baseline-device\",\"_rev\":\"-304439226\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"oidcClaimsClass\":null,\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"accessTokenModifierClass\":null,\"customLoginUrlTemplate\":null,\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"code\",\"token\",\"id_token\",\"code token\",\"token id_token\",\"code id_token\",\"code token id_token\",\"device_code\",\"device_code id_token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"none\",\"isConsentImplied\":true,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"urn:ietf:params:oauth:grant-type:device_code\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":0,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"status\":\"Active\",\"clientName\":[\"Streaming Services\"],\"clientType\":\"Public\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"agentgroup\":null,\"refreshTokenLifetime\":0,\"scopes\":[\"openid\",\"profile\"],\"accessTokenLifetime\":0,\"redirectionUris\":[],\"authorizationCodeLifetime\":0},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"baseline-ios-sdk\",\"_rev\":\"-380249535\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"oidcClaimsClass\":null,\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"accessTokenModifierClass\":null,\"customLoginUrlTemplate\":null,\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"code\",\"token\",\"id_token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[\"forgerock://oidc_callback\"],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"none\",\"isConsentImplied\":true,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"authorization_code\",\"refresh_token\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":0,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"status\":\"Active\",\"clientName\":[],\"clientType\":\"Public\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"agentgroup\":null,\"refreshTokenLifetime\":0,\"scopes\":[\"openid\",\"profile\",\"address\",\"phone\",\"email\",\"fr:idm:*\"],\"accessTokenLifetime\":0,\"redirectionUris\":[\"forgerock://oidc_callback\"],\"authorizationCodeLifetime\":0},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"baseline-ciba\",\"_rev\":\"640454649\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"oidcClaimsClass\":null,\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"accessTokenModifierClass\":null,\"customLoginUrlTemplate\":null,\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"token\",\"id_token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":false,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"urn:openid:params:grant-type:ciba\",\"authorization_code\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":\"{\\\"keys\\\" :[{ \\\"kty\\\": \\\"EC\\\", \\\"d\\\": \\\"bXhBnmXPav9lgPPs6zavwlqbSmaMpdyeh564d0uNI8k\\\", \\\"use\\\": \\\"sig\\\", \\\"crv\\\": \\\"P-256\\\", \\\"kid\\\": \\\"mykey\\\", \\\"x\\\": \\\"E8IyIrUIBdMVAFhRIcNtDVUI8OTDDSs-LRziuBthM4s\\\", \\\"y\\\": \\\"1jH5o5B5hBeqARhYTMPl5l8CVNOFIVrvYd_TiFH6FkQ\\\" }]}\",\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":0,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"status\":\"Active\",\"clientName\":[],\"clientType\":\"Confidential\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"agentgroup\":null,\"refreshTokenLifetime\":0,\"scopes\":[\"openid\",\"profile\"],\"accessTokenLifetime\":0,\"redirectionUris\":[],\"authorizationCodeLifetime\":0},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"baseline-web\",\"_rev\":\"1513280137\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"oidcClaimsClass\":null,\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"accessTokenModifierClass\":null,\"customLoginUrlTemplate\":null,\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"code\",\"token\",\"id_token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"none\",\"isConsentImplied\":true,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"authorization_code\",\"refresh_token\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":0,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[\"https://sdkapp.example.com:8443\",\"https://volker-demo.encore.forgerock.com/demo/webapp/en/home\",\"https://volker-demo.encore.forgerock.com/demo/sdks\",\"forgerock://oidc_callback\"],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"status\":\"Active\",\"clientName\":[],\"clientType\":\"Public\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"agentgroup\":null,\"refreshTokenLifetime\":0,\"scopes\":[\"openid\",\"profile\",\"address\",\"phone\",\"email\",\"fr:idm:*\"],\"accessTokenLifetime\":0,\"redirectionUris\":[\"https://sdkapp.example.com:8443\",\"https://volker-demo.encore.forgerock.com/demo/webapp/en/home\",\"https://volker-demo.encore.forgerock.com/demo/sdks\",\"forgerock://oidc_callback\"],\"authorizationCodeLifetime\":0},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"da190d6b-0fcc-42aa-b890-0cef7486e6d4\",\"_rev\":\"1950851195\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"Public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":true,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"client_credentials\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[\"Created by Frodo on 3/20/2024, 9:46:11 AM\"],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":3600,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"userpassword\":null,\"status\":\"Active\",\"clientName\":[\"da190d6b-0fcc-42aa-b890-0cef7486e6d4\"],\"clientType\":\"Confidential\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[\"fr:idm:*\"],\"refreshTokenLifetime\":604800,\"scopes\":[\"fr:idm:*\",\"fr:idc:esv:*\",\"dynamic_client_registration\"],\"accessTokenLifetime\":3600,\"redirectionUris\":[],\"authorizationCodeLifetime\":120},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"test2\",\"_rev\":\"190847602\",\"coreOAuth2ClientConfig\":{\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[\"openid\"],\"refreshTokenLifetime\":0,\"scopes\":[\"openid\",\"fr:idm:*\"],\"status\":\"Active\",\"accessTokenLifetime\":0,\"redirectionUris\":[],\"clientName\":[\"test2\"],\"clientType\":\"Confidential\",\"authorizationCodeLifetime\":0},\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"remoteConsentServiceId\":null,\"tokenEncryptionEnabled\":false,\"enableRemoteConsent\":false,\"oidcMayActScript\":\"[Empty]\",\"usePolicyEngineForScope\":false,\"oidcClaimsScript\":\"36863ffb-40ec-48b9-94b1-9a99f71cc3b5\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"d22f9a0c-426a-4466-b95e-d0f125b0d5fa\",\"providerOverridesEnabled\":false,\"issueRefreshTokenOnRefreshedToken\":true,\"statelessTokensEnabled\":false},\"advancedOAuth2ClientConfig\":{\"descriptions\":[\"Modified by Frodo on 4/16/2022, 8:41:59 PM\"],\"requestUris\":[],\"logoUri\":[],\"subjectType\":\"public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"name\":[],\"contacts\":[],\"responseTypes\":[\"code\",\"token\",\"id_token\"],\"updateAccessToken\":null,\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":false,\"softwareIdentity\":null,\"grantTypes\":[\"authorization_code\",\"refresh_token\",\"client_credentials\"]},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"jwkStoreCacheMissCacheTime\":60000,\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"mTLSTrustedCert\":null,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"jwksUri\":null,\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"clientSessionUri\":null,\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":0,\"defaultMaxAgeEnabled\":false,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"testclient\",\"_rev\":\"393665749\",\"coreOAuth2ClientConfig\":{\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"refreshTokenLifetime\":0,\"scopes\":[\"email\",\"openid\",\"profile\"],\"status\":\"Active\",\"accessTokenLifetime\":0,\"redirectionUris\":[],\"clientName\":[],\"clientType\":\"Confidential\",\"authorizationCodeLifetime\":0},\"advancedOAuth2ClientConfig\":{\"descriptions\":[],\"requestUris\":[],\"logoUri\":[],\"subjectType\":\"public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"name\":[],\"contacts\":[],\"responseTypes\":[\"code\",\"token\",\"id_token\",\"code token\",\"token id_token\",\"code id_token\",\"code token id_token\",\"device_code\",\"device_code id_token\"],\"updateAccessToken\":null,\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":false,\"softwareIdentity\":null,\"grantTypes\":[\"authorization_code\"]},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"jwkStoreCacheMissCacheTime\":60000,\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"mTLSTrustedCert\":null,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"jwksUri\":null,\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"clientSessionUri\":null,\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":0,\"defaultMaxAgeEnabled\":false,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}}],\"resultCount\":17,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":17,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0, resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:00 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 800, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:00.728Z", - "time": 195, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 195 - } - }, - { - "_id": "b018c656edd9b18dbe52d69949881ef4", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1990, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication" - }, - "response": { - "bodySize": 1459, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1459, - "text": "{\"_id\":\"\",\"_rev\":\"-1952817720\",\"postauthprocess\":{\"usernameGeneratorClass\":\"com.sun.identity.authentication.spi.DefaultUserIDGenerator\",\"usernameGeneratorEnabled\":true,\"loginPostProcessClass\":[],\"loginSuccessUrl\":[\"/enduser/?realm=/alpha\"],\"userAttributeSessionMapping\":[],\"loginFailureUrl\":[]},\"security\":{\"zeroPageLoginEnabled\":false,\"zeroPageLoginReferrerWhiteList\":[],\"zeroPageLoginAllowedWithoutReferrer\":true,\"moduleBasedAuthEnabled\":false,\"sharedSecret\":{\"$string\":\"&{am.authentication.shared.secret}\"},\"addClearSiteDataHeader\":true,\"keyAlias\":\"test\"},\"trees\":{\"suspendedAuthenticationTimeout\":1440,\"authenticationSessionsStateManagement\":\"JWT\",\"authenticationSessionsMaxDuration\":5,\"authenticationTreeCookieHttpOnly\":true,\"authenticationSessionsWhitelist\":false},\"accountlockout\":{\"loginFailureLockoutMode\":false,\"storeInvalidAttemptsInDataStore\":true,\"lockoutDuration\":0,\"lockoutDurationMultiplier\":1,\"lockoutWarnUserCount\":0,\"loginFailureCount\":5,\"loginFailureDuration\":300},\"core\":{\"adminAuthModule\":\"Login\",\"orgConfig\":\"Login\"},\"general\":{\"userStatusCallbackPlugins\":[],\"statelessSessionsEnabled\":false,\"locale\":\"en_US\",\"externalLoginPageUrl\":\"https://volker-demo.encore.forgerock.com/demo/webapp/en/home/redirect\",\"twoFactorRequired\":false,\"identityType\":[\"agent\",\"user\"],\"defaultAuthLevel\":0},\"userprofile\":{\"dynamicProfileCreation\":\"false\",\"defaultRole\":[],\"aliasAttributeName\":[\"uid\"]},\"_type\":{\"_id\":\"EMPTY\",\"name\":\"Core\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1952817720\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1459" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:01 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 788, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:00.934Z", - "time": 95, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 95 - } - }, - { - "_id": "fd73e4ce797b9b32578e46481feba4a3", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 2, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "content-length", - "value": "2" - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2065, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{}" - }, - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/SocialIdentityProviders?_action=nextdescendents" - }, - "response": { - "bodySize": 10076, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 10076, - "text": "{\"result\":[{\"clientId\":\"297338177925-mho17cgnm540s2gre8h27feb6sbs1msd.apps.googleusercontent.com\",\"pkceMethod\":\"S256\",\"wellKnownEndpoint\":\"https://accounts.google.com/.well-known/openid-configuration\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://accounts.google.com/o/oauth2/v2/auth\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"encryptJwtRequestParameter\":false,\"scopeDelimiter\":\" \",\"scopes\":[\"openid\",\"profile\",\"email\"],\"issuer\":\"https://accounts.google.com\",\"userInfoResponseType\":\"JSON\",\"acrValues\":[],\"encryptedIdTokens\":false,\"enabled\":true,\"jwtRequestParameterOption\":\"NONE\",\"authenticationIdKey\":\"sub\",\"uiConfig\":{\"buttonClass\":\"\",\"buttonCustomStyle\":\"background-color: #fff; color: #757575; border-color: #ddd;\",\"buttonCustomStyleHover\":\"color: #6d6d6d; background-color: #eee; border-color: #ccc;\",\"buttonDisplayName\":\"Google\",\"buttonImage\":\"images/g-logo.png\",\"iconBackground\":\"#4184f3\",\"iconClass\":\"fa-google\",\"iconFontColor\":\"white\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"enableNativeNonce\":true,\"transform\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"userInfoEndpoint\":\"https://www.googleapis.com/oauth2/v3/userinfo\",\"jwtSigningAlgorithm\":\"NONE\",\"redirectURI\":\"https://idc.scheuber.io/login\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"DEFAULT\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://www.googleapis.com/oauth2/v4/token\",\"_id\":\"google\",\"_type\":{\"_id\":\"googleConfig\",\"name\":\"Client configuration for Google.\",\"collection\":true}},{\"clientId\":\"bdae6d141d4dcf95a630\",\"pkceMethod\":\"S256\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://github.com/login/oauth/authorize\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"scopeDelimiter\":\" \",\"scopes\":[\"user\"],\"enabled\":true,\"authenticationIdKey\":\"id\",\"uiConfig\":{\"buttonCustomStyle\":\"background-color: #fff; color: #757575; border-color: #ddd;\",\"buttonCustomStyleHover\":\"color: #6d6d6d; background-color: #eee; border-color: #ccc;\",\"buttonDisplayName\":\"GitHub\",\"buttonImage\":\"https://cdn-icons-png.flaticon.com/512/25/25231.png\",\"iconBackground\":\"#4184f3\",\"iconFontColor\":\"white\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"transform\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"userInfoEndpoint\":\"https://ig.mytestrun.com/user\",\"jwtSigningAlgorithm\":\"NONE\",\"redirectURI\":\"https://idc.scheuber.io/login\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"DEFAULT\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://ig.mytestrun.com/login/oauth/access_token\",\"_id\":\"github\",\"_type\":{\"_id\":\"oauth2Config\",\"name\":\"Client configuration for providers that implement the OAuth2 specification.\",\"collection\":true}},{\"clientId\":\"CHANGE ME\",\"pkceMethod\":\"S256\",\"wellKnownEndpoint\":\"https://appleid.apple.com/.well-known/openid-configuration\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://appleid.apple.com/auth/authorize\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"encryptJwtRequestParameter\":false,\"scopeDelimiter\":\" \",\"scopes\":[\"name\",\"email\"],\"issuer\":\"https://appleid.apple.com\",\"redirectAfterFormPostURI\":\"https://openam-volker-dev.forgeblocks.com/login\",\"userInfoResponseType\":\"JSON\",\"acrValues\":[],\"jwksUriEndpoint\":\"https://appleid.apple.com/auth/keys\",\"encryptedIdTokens\":false,\"requestNativeAppForUserInfo\":false,\"enabled\":false,\"jwtRequestParameterOption\":\"NONE\",\"authenticationIdKey\":\"sub\",\"uiConfig\":{\"buttonClass\":\"\",\"buttonCustomStyle\":\"background-color: #000000; color: #ffffff; border-color: #000000;\",\"buttonCustomStyleHover\":\"background-color: #000000; color: #ffffff; border-color: #000000;\",\"buttonDisplayName\":\"Apple\",\"buttonImage\":\"/login/images/apple-logo.png\",\"iconBackground\":\"#000000\",\"iconClass\":\"fa-apple\",\"iconFontColor\":\"white\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"enableNativeNonce\":true,\"transform\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"jwtSigningAlgorithm\":\"NONE\",\"redirectURI\":\"https://openam-volker-dev.forgeblocks.com/am/oauth2/alpha/client/form_post/apple-stoyan\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"FORM_POST\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://appleid.apple.com/auth/token\",\"_id\":\"apple-stoyan\",\"_type\":{\"_id\":\"appleConfig\",\"name\":\"Client configuration for Apple.\",\"collection\":true}},{\"clientId\":\"io.scheuber.idc.signinWithApple.service\",\"pkceMethod\":\"S256\",\"wellKnownEndpoint\":\"https://appleid.apple.com/.well-known/openid-configuration\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://appleid.apple.com/auth/authorize\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"encryptJwtRequestParameter\":false,\"scopeDelimiter\":\" \",\"scopes\":[\"name\",\"email\"],\"issuer\":\"https://appleid.apple.com\",\"redirectAfterFormPostURI\":\"https://idc.scheuber.io/login\",\"userInfoResponseType\":\"JSON\",\"acrValues\":[],\"jwksUriEndpoint\":\"https://appleid.apple.com/auth/keys\",\"encryptedIdTokens\":false,\"requestNativeAppForUserInfo\":false,\"enabled\":true,\"jwtRequestParameterOption\":\"NONE\",\"authenticationIdKey\":\"sub\",\"uiConfig\":{\"buttonClass\":\"\",\"buttonCustomStyle\":\"background-color: #000000; color: #ffffff; border-color: #000000;\",\"buttonCustomStyleHover\":\"background-color: #000000; color: #ffffff; border-color: #000000;\",\"buttonDisplayName\":\"Apple\",\"buttonImage\":\"/login/images/apple-logo.png\",\"iconBackground\":\"#000000\",\"iconClass\":\"fa-apple\",\"iconFontColor\":\"white\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"enableNativeNonce\":true,\"transform\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"jwtSigningAlgorithm\":\"NONE\",\"redirectURI\":\"https://idc.scheuber.io/am/oauth2/client/form_post/apple_web\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"FORM_POST\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://appleid.apple.com/auth/token\",\"_id\":\"apple_web\",\"_type\":{\"_id\":\"appleConfig\",\"name\":\"Client configuration for Apple.\",\"collection\":true}},{\"clientId\":\"0oa13r2cp29Rynmyw697\",\"pkceMethod\":\"S256\",\"wellKnownEndpoint\":\"https://trial-5735851.okta.com/.well-known/openid-configuration\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://trial-5735851.okta.com/oauth2/v1/authorize\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"encryptJwtRequestParameter\":false,\"scopeDelimiter\":\" \",\"scopes\":[\"openid\",\"profile\",\"email\"],\"issuer\":\"https://trial-5735851.okta.com\",\"userInfoResponseType\":\"JSON\",\"acrValues\":[],\"encryptedIdTokens\":false,\"enabled\":true,\"jwtRequestParameterOption\":\"NONE\",\"authenticationIdKey\":\"id\",\"uiConfig\":{\"buttonDisplayName\":\"Okta\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"enableNativeNonce\":true,\"transform\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"userInfoEndpoint\":\"https://trial-5735851.okta.com/oauth2/v1/userinfo\",\"jwtSigningAlgorithm\":\"NONE\",\"redirectURI\":\"https://idc.scheuber.io/login\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"DEFAULT\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://trial-5735851.okta.com/oauth2/v1/token\",\"_id\":\"okta-trial-5735851\",\"_type\":{\"_id\":\"oidcConfig\",\"name\":\"Client configuration for providers that implement the OpenID Connect specification.\",\"collection\":true}},{\"clientId\":\"aa9a179e-cdba-4db8-8477-3d1069d5ec04\",\"pkceMethod\":\"S256\",\"wellKnownEndpoint\":\"https://adfs.mytestrun.com/adfs/.well-known/openid-configuration\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://adfs.mytestrun.com/adfs/oauth2/authorize\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"encryptJwtRequestParameter\":false,\"scopeDelimiter\":\" \",\"scopes\":[\"openid\",\"profile\",\"email\"],\"issuer\":\"https://adfs.mytestrun.com/adfs\",\"userInfoResponseType\":\"JSON\",\"acrValues\":[],\"jwksUriEndpoint\":\"https://adfs.mytestrun.com/adfs/discovery/keys\",\"encryptedIdTokens\":false,\"enabled\":true,\"jwtRequestParameterOption\":\"NONE\",\"authenticationIdKey\":\"sub\",\"uiConfig\":{\"buttonClass\":\"\",\"buttonCustomStyle\":\"background-color: #fff; border-color: #8b8b8b; color: #8b8b8b;\",\"buttonCustomStyleHover\":\"background-color: #fff; border-color: #8b8b8b; color: #8b8b8b;\",\"buttonDisplayName\":\"Microsoft ADFS\",\"buttonImage\":\"/login/images/microsoft-logo.png\",\"iconBackground\":\"#0078d7\",\"iconClass\":\"fa-windows\",\"iconFontColor\":\"white\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"enableNativeNonce\":true,\"transform\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"jwtSigningAlgorithm\":\"RS256\",\"redirectURI\":\"https://idc.scheuber.io/login\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"DEFAULT\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://adfs.mytestrun.com/adfs/oauth2/token\",\"_id\":\"adfs\",\"_type\":{\"_id\":\"oidcConfig\",\"name\":\"Client configuration for providers that implement the OpenID Connect specification.\",\"collection\":true}},{\"clientId\":\"c42a3dc8-f276-496b-a722-269f131cc21c\",\"pkceMethod\":\"S256\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://login.microsoftonline.com/711ffa9c-5972-4713-ace3-688c9732614a/oauth2/v2.0/authorize\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"scopeDelimiter\":\" \",\"scopes\":[\"User.Read\",\"openid\"],\"enabled\":true,\"authenticationIdKey\":\"id\",\"uiConfig\":{\"buttonClass\":\"\",\"buttonCustomStyle\":\"background-color: #fff; border-color: #8b8b8b; color: #8b8b8b;\",\"buttonCustomStyleHover\":\"background-color: #fff; border-color: #8b8b8b; color: #8b8b8b;\",\"buttonDisplayName\":\"Microsoft Azure\",\"buttonImage\":\"/login/images/microsoft-logo.png\",\"iconBackground\":\"#0078d7\",\"iconClass\":\"fa-windows\",\"iconFontColor\":\"white\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"transform\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"userInfoEndpoint\":\"https://graph.microsoft.com/v1.0/me\",\"jwtSigningAlgorithm\":\"NONE\",\"redirectURI\":\"https://idc.scheuber.io/login\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"DEFAULT\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://login.microsoftonline.com/711ffa9c-5972-4713-ace3-688c9732614a/oauth2/v2.0/token\",\"_id\":\"azure\",\"_type\":{\"_id\":\"microsoftConfig\",\"name\":\"Client configuration for Microsoft.\",\"collection\":true}}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:01 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 773, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:01.037Z", - "time": 271, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 271 - } - }, - { - "_id": "41f9a2a11475c58ca47f55b44d90ffd1", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2020, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts/58d29080-4563-480b-89bb-1e7719776a21" - }, - "response": { - "bodySize": 1539, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1539, - "text": "{\"_id\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"name\":\"Google Profile Normalization\",\"description\":\"Normalizes raw profile data from Google\",\"script\":\"IlwiLypcXG4gKiBDb3B5cmlnaHQgMjAyMCBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcXG4gKlxcbiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuXFxuICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdFxcbiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLlxcbiAqL1xcblxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5maWVsZFxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uXFxuaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdFxcblxcbnJldHVybiBqc29uKG9iamVjdChcXG4gICAgICAgIGZpZWxkKFxcXCJpZFxcXCIsIHJhd1Byb2ZpbGUuc3ViKSxcXG4gICAgICAgIGZpZWxkKFxcXCJkaXNwbGF5TmFtZVxcXCIsIHJhd1Byb2ZpbGUubmFtZSksXFxuICAgICAgICBmaWVsZChcXFwiZ2l2ZW5OYW1lXFxcIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJmYW1pbHlOYW1lXFxcIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksXFxuICAgICAgICBmaWVsZChcXFwicGhvdG9VcmxcXFwiLCByYXdQcm9maWxlLnBpY3R1cmUpLFxcbiAgICAgICAgZmllbGQoXFxcImVtYWlsXFxcIiwgcmF3UHJvZmlsZS5lbWFpbCksXFxuICAgICAgICBmaWVsZChcXFwidXNlcm5hbWVcXFwiLCByYXdQcm9maWxlLmVtYWlsKSxcXG4gICAgICAgIGZpZWxkKFxcXCJsb2NhbGVcXFwiLCByYXdQcm9maWxlLmxvY2FsZSkpKVwiXG4i\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1539" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:01 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 767, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:01.315Z", - "time": 115, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 115 - } - }, - { - "_id": "2a629d44458d89be596f62c70d132126", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2020, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts/23143919-6b78-40c3-b25e-beca19b229e0" - }, - "response": { - "bodySize": 1437, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1437, - "text": "{\"_id\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"name\":\"GitHub Profile Normalization (VS)\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJHaXRIdWIgcmF3UHJvZmlsZTogIityYXdQcm9maWxlKQoKcmV0dXJuIGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZmlyc3RfbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3RfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5waWN0dXJlLmRhdGEudXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLmVtYWlsKSkpCg==\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1437" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:01 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 767, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:01.435Z", - "time": 88, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 88 - } - }, - { - "_id": "c9c29f6243c069de2fbcd88906d75b96", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2020, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts/484e6246-dbc6-4288-97e6-54e55431402e" - }, - "response": { - "bodySize": 3085, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 3085, - "text": "{\"_id\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"name\":\"Apple Profile Normalization\",\"description\":\"Normalizes raw profile data from Apple\",\"script\":\"IlwiLypcXG4gKiBDb3B5cmlnaHQgMjAyMS0yMDIyIEZvcmdlUm9jayBBUy4gQWxsIFJpZ2h0cyBSZXNlcnZlZFxcbiAqXFxuICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy5cXG4gKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0XFxuICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuXFxuICpcXG4gKiBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eTpcXG4gKiB1c2VybmFtZSwgZ2l2ZW5OYW1lLCBmYW1pbHlOYW1lLCBlbWFpbC5cXG4gKlxcbiAqIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmVcXG4gKiBhcmJpdHJhcnkgY2hhcmFjdGVycyBmcm9tIHRoZSBVbml2ZXJzYWwgQ2hhcmFjdGVyIFNldCAoVUNTKS5cXG4gKiBBIHplcm8tbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmcgaXMgbm90IHBlcm1pdHRlZC5cXG4gKi9cXG5cXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGRcXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvblxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3RcXG5cXG5TdHJpbmcgZW1haWwgPSBcXFwiY2hhbmdlQG1lLmNvbVxcXCJcXG5TdHJpbmcgc3ViamVjdElkID0gcmF3UHJvZmlsZS5zdWJcXG5TdHJpbmcgZmlyc3ROYW1lID0gXFxcIiBcXFwiXFxuU3RyaW5nIGxhc3ROYW1lID0gXFxcIiBcXFwiXFxuU3RyaW5nIHVzZXJuYW1lID0gc3ViamVjdElkXFxuU3RyaW5nIG5hbWVcXG5cXG5pZiAocmF3UHJvZmlsZS5pc0RlZmluZWQoXFxcImVtYWlsXFxcIikgJiYgcmF3UHJvZmlsZS5lbWFpbC5pc05vdE51bGwoKSl7IC8vIFVzZXIgY2FuIGVsZWN0IHRvIG5vdCBzaGFyZSB0aGVpciBlbWFpbFxcbiAgICBlbWFpbCA9IHJhd1Byb2ZpbGUuZW1haWwuYXNTdHJpbmcoKVxcbiAgICB1c2VybmFtZSA9IGVtYWlsXFxufVxcbmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZChcXFwibmFtZVxcXCIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkge1xcbiAgICBpZiAocmF3UHJvZmlsZS5uYW1lLmlzRGVmaW5lZChcXFwiZmlyc3ROYW1lXFxcIikgJiYgcmF3UHJvZmlsZS5uYW1lLmZpcnN0TmFtZS5pc05vdE51bGwoKSkge1xcbiAgICAgICAgZmlyc3ROYW1lID0gcmF3UHJvZmlsZS5uYW1lLmZpcnN0TmFtZS5hc1N0cmluZygpXFxuICAgIH1cXG4gICAgaWYgKHJhd1Byb2ZpbGUubmFtZS5pc0RlZmluZWQoXFxcImxhc3ROYW1lXFxcIikgJiYgcmF3UHJvZmlsZS5uYW1lLmxhc3ROYW1lLmlzTm90TnVsbCgpKSB7XFxuICAgICAgICBsYXN0TmFtZSA9IHJhd1Byb2ZpbGUubmFtZS5sYXN0TmFtZS5hc1N0cmluZygpXFxuICAgIH1cXG59XFxuXFxubmFtZSA9IChmaXJzdE5hbWU/LnRyaW0oKSA/IGZpcnN0TmFtZSA6IFxcXCJcXFwiKSArIChsYXN0TmFtZT8udHJpbSgpID8gKChmaXJzdE5hbWU/LnRyaW0oKSA/IFxcXCIgXFxcIiA6IFxcXCJcXFwiKSArIGxhc3ROYW1lKSA6IFxcXCJcXFwiKVxcbm5hbWUgPSAgKCFuYW1lPy50cmltKCkpID8gXFxcIiBcXFwiIDogbmFtZVxcblxcbnJldHVybiBqc29uKG9iamVjdChcXG4gICAgICAgIGZpZWxkKFxcXCJpZFxcXCIsIHN1YmplY3RJZCksXFxuICAgICAgICBmaWVsZChcXFwiZGlzcGxheU5hbWVcXFwiLCBuYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJlbWFpbFxcXCIsIGVtYWlsKSxcXG4gICAgICAgIGZpZWxkKFxcXCJnaXZlbk5hbWVcXFwiLCBmaXJzdE5hbWUpLFxcbiAgICAgICAgZmllbGQoXFxcImZhbWlseU5hbWVcXFwiLCBsYXN0TmFtZSksXFxuICAgICAgICBmaWVsZChcXFwidXNlcm5hbWVcXFwiLCB1c2VybmFtZSkpKVwiXG4i\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "3085" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:01 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 767, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:01.528Z", - "time": 72, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 72 - } - }, - { - "_id": "25e192c5928c02496592a6a3a01c529b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2020, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts/6325cf19-a49b-471e-8d26-7e4df76df0e2" - }, - "response": { - "bodySize": 1442, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1442, - "text": "{\"_id\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"name\":\"Okta Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJPa3RhIHJhd1Byb2ZpbGU6ICIrcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5wcmVmZXJyZWRfdXNlcm5hbWUpKSkK\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1442" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:01 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 767, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:01.684Z", - "time": 69, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 69 - } - }, - { - "_id": "38b418bd868b6fbac228ebf071b7e860", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2020, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts/dbe0bf9a-72aa-49d5-8483-9db147985a47" - }, - "response": { - "bodySize": 7225, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 7225, - "text": "{\"_id\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"name\":\"ADFS Profile Normalization (JS)\",\"description\":\"Normalizes raw profile data from ADFS\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIHRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIKICogaW4gYSBzdGFuZGFyZCBmb3JtIGV4cGVjdGVkIGJ5IHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogcmF3UHJvZmlsZSAtIFRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvdmlkZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIuCiAqICAgICAgICAgICAgICBKc29uVmFsdWUgKDEpLgogKiBsb2dnZXIgLSBUaGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIHJlcXVlc3RIZWFkZXJzIC0gVHJlZU1hcCAoMikuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBoZWFkZXJzIGluIHRoZSBsb2dpbiByZXF1ZXN0OgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1yZXF1ZXN0SGVhZGVycy4KICogcmVxdWVzdFBhcmFtZXRlcnMgLSBUcmVlTWFwICgyKS4KICogICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICogc2VsZWN0ZWRJZHAgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgVGhlIHNvY2lhbCBpZGVudGl0eSBwcm92aWRlciBuYW1lLiBGb3IgZXhhbXBsZTogZ29vZ2xlLgogKiBzaGFyZWRTdGF0ZSAtIExpbmtlZEhhc2hNYXAgKDMpLgogKiAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgYW5kIGFsbG93cyBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyBub2RlczoKICogICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoLW5vZGVzL2NvcmUtYWN0aW9uLmh0bWwjYWNjZXNzaW5nLXRyZWUtc3RhdGUuCiAqIHRyYW5zaWVudFN0YXRlIC0gTGlua2VkSGFzaE1hcCAoMykuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBmb3Igc3RvcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhdCBtdXN0IG5vdCBsZWF2ZSB0aGUgc2VydmVyIHVuZW5jcnlwdGVkLAogKiAgICAgICAgICAgICAgICAgIGFuZCB0aGF0IG1heSBub3QgbmVlZCB0byBwZXJzaXN0IGJldHdlZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uOgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGgtbm9kZXMvY29yZS1hY3Rpb24uaHRtbCNhY2Nlc3NpbmctdHJlZS1zdGF0ZS4KICoKICogUmV0dXJuIC0gYSBKc29uVmFsdWUgKDEpLgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqCiAqICAgICAgICAgIFRoaXMgc2NyaXB0J3MgbGFzdCBzdGF0ZW1lbnQgc2hvdWxkIHJlc3VsdCBpbiBhIEpzb25WYWx1ZSAoMSkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqICAgICAgICAgIHsKICogICAgICAgICAgICAgIHsiZGlzcGxheU5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZW1haWwiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZmFtaWx5TmFtZSI6ICJjb3JyZXNwb25kaW5nLXNvY2lhbC1pZGVudGl0eS1wcm92aWRlci12YWx1ZSJ9LAogKiAgICAgICAgICAgICAgeyJnaXZlbk5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiaWQiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsibG9jYWxlIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InBob3RvVXJsIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InVzZXJuYW1lIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0KICogICAgICAgICAgfQogKgogKiAgICAgICAgICBUaGUgY29uc3VtZXIgb2YgdGhpcyBkYXRhIGRlZmluZXMgd2hpY2gga2V5cyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBvcHRpb25hbC4KICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlIGFuZCwKICogICAgICAgICAgdWx0aW1hdGVseSwgdGhlIG1hbmFnZWQgb2JqZWN0IGNyZWF0ZWQvdXBkYXRlZCB3aXRoIHRoaXMgZGF0YQogKiAgICAgICAgICB3aWxsIGV4cGVjdCBjZXJ0YWluIGtleXMgdG8gYmUgcG9wdWxhdGVkLgogKiAgICAgICAgICBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eToKICogICAgICAgICAgdXNlcm5hbWUsIGdpdmVuTmFtZSwgZmFtaWx5TmFtZSwgZW1haWwuCiAqCiAqICAgICAgICAgIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKICogICAgICAgICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgZnJvbSB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBTZXQgKFVDUykuCiAqICAgICAgICAgIEEgemVyby1sZW5ndGggY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgcGVybWl0dGVkLgogKgogKiAoMSkgSnNvblZhbHVlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2pzb24vSnNvblZhbHVlLmh0bWwuCiAqICgyKSBUcmVlTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwuCiAqICgzKSBMaW5rZWRIYXNoTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQogICAgKTsKCiAgICB2YXIgbm9ybWFsaXplZFByb2ZpbGVEYXRhID0gZnJKYXZhLkpzb25WYWx1ZS5qc29uKGZySmF2YS5Kc29uVmFsdWUub2JqZWN0KCkpOwogIAogICAgICAvL2xvZ2dlci5tZXNzYWdlKCdTZWd1aW4gcmF3UHJvZmlsZTogJytyYXdQcm9maWxlKTsKCiAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KCdpZCcsIHJhd1Byb2ZpbGUuZ2V0KCdzdWInKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2Rpc3BsYXlOYW1lJywgcmF3UHJvZmlsZS5nZXQoJ2dpdmVuTmFtZScpLmFzU3RyaW5nKCkgKyAnICcgKyByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2VtYWlsJywgcmF3UHJvZmlsZS5nZXQoJ21haWwnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dpdmVuTmFtZScsIHJhd1Byb2ZpbGUuZ2V0KCdnaXZlbk5hbWUnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2ZhbWlseU5hbWUnLCByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ3VzZXJuYW1lJywgcmF3UHJvZmlsZS5nZXQoJ3VwbicpLmFzU3RyaW5nKCkpOwogICAgbm9ybWFsaXplZFByb2ZpbGVEYXRhLnB1dCgncm9sZXMnLCByYXdQcm9maWxlLmdldCgncm9sZXMnKS5hc1N0cmluZygpKTsKICAKICAgICAgLy9sb2dnZXIubWVzc2FnZSgnU2VndWluIG5vcm1hbGl6ZWRQcm9maWxlRGF0YTogJytub3JtYWxpemVkUHJvZmlsZURhdGEpOwoKICAgIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "7225" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:01 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 767, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:01.758Z", - "time": 84, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 84 - } - }, - { - "_id": "76aff675b00253f98c877016da557738", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2020, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts/73cecbfc-dad0-4395-be6a-6858ee3a80e5" - }, - "response": { - "bodySize": 2773, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 2773, - "text": "{\"_id\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"name\":\"Microsoft Profile Normalization\",\"description\":\"Normalizes raw profile data from Microsoft\",\"script\":\"IlwiLypcXG4gKiBDb3B5cmlnaHQgMjAyMCBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcXG4gKlxcbiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuXFxuICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdFxcbiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLlxcbiAqL1xcblxcbi8qXFxue1xcbiAgICBcXFwiQG9kYXRhLmNvbnRleHRcXFwiOiBcXFwiaHR0cHM6Ly9ncmFwaC5taWNyb3NvZnQuY29tL3YxLjAvJG1ldGFkYXRhI3VzZXJzLyRlbnRpdHlcXFwiLFxcbiAgICBcXFwiQG9kYXRhLmlkXFxcIjogXFxcImh0dHBzOi8vZ3JhcGgubWljcm9zb2Z0LmNvbS92Mi83MTFmZmE5Yy01OTcyLTQ3MTMtYWNlMy02ODhjOTczMjYxNGEvZGlyZWN0b3J5T2JqZWN0cy83ZDc3NTllMi0zNmQ4LTRlNjQtYjE3My0zZjg5MGQ3ZDQ2ZDYvTWljcm9zb2Z0LkRpcmVjdG9yeVNlcnZpY2VzLlVzZXJcXFwiLFxcbiAgICBcXFwiYnVzaW5lc3NQaG9uZXNcXFwiOiBbXFxuICAgICAgICBcXFwiMTgwMTQ3MzU0NTFcXFwiXFxuICAgIF0sXFxuICAgIFxcXCJkaXNwbGF5TmFtZVxcXCI6IFxcXCJWb2xrZXIgU2NoZXViZXJcXFwiLFxcbiAgICBcXFwiZ2l2ZW5OYW1lXFxcIjogXFxcIlZvbGtlclxcXCIsXFxuICAgIFxcXCJqb2JUaXRsZVxcXCI6IG51bGwsXFxuICAgIFxcXCJtYWlsXFxcIjogXFxcInZzY2hldWJlckB2c2NoZXViZXIub25taWNyb3NvZnQuY29tXFxcIixcXG4gICAgXFxcIm1vYmlsZVBob25lXFxcIjogbnVsbCxcXG4gICAgXFxcIm9mZmljZUxvY2F0aW9uXFxcIjogbnVsbCxcXG4gICAgXFxcInByZWZlcnJlZExhbmd1YWdlXFxcIjogbnVsbCxcXG4gICAgXFxcInN1cm5hbWVcXFwiOiBcXFwiU2NoZXViZXJcXFwiLFxcbiAgICBcXFwidXNlclByaW5jaXBhbE5hbWVcXFwiOiBcXFwidnNjaGV1YmVyQHZzY2hldWJlci5vbm1pY3Jvc29mdC5jb21cXFwiLFxcbiAgICBcXFwiaWRcXFwiOiBcXFwiN2Q3NzU5ZTItMzZkOC00ZTY0LWIxNzMtM2Y4OTBkN2Q0NmQ2XFxcIlxcbn1cXG4gKi9cXG5cXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGRcXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvblxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3RcXG5cXG5sb2dnZXIubWVzc2FnZShcXFwiS2F1YWkgTWljcm9zb2Z0IFByb2ZpbGUgTm9ybWFsaXphdGlvbjogcmF3UHJvZmlsZT17fVxcXCIsIHJhd1Byb2ZpbGUpXFxuXFxucmV0dXJuIGpzb24ob2JqZWN0KFxcbiAgICAgICAgZmllbGQoXFxcImlkXFxcIiwgcmF3UHJvZmlsZS5pZCksXFxuICAgICAgICBmaWVsZChcXFwiZGlzcGxheU5hbWVcXFwiLCByYXdQcm9maWxlLmRpc3BsYXlOYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJnaXZlbk5hbWVcXFwiLCByYXdQcm9maWxlLmdpdmVuTmFtZSksXFxuICAgICAgICBmaWVsZChcXFwiZmFtaWx5TmFtZVxcXCIsIHJhd1Byb2ZpbGUuc3VybmFtZSksXFxuICAgICAgICBmaWVsZChcXFwiZW1haWxcXFwiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJ1c2VybmFtZVxcXCIsIHJhd1Byb2ZpbGUudXNlclByaW5jaXBhbE5hbWUpLFxcbiAgICAgICAgZmllbGQoXFxcImdyb3Vwc1xcXCIsIHJhd1Byb2ZpbGUuZ3JvdXBzKSkpXCJcbiI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "2773" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:01 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 767, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:01.847Z", - "time": 84, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 84 - } - }, - { - "_id": "5e1572d06b69cd47c0d9d94bf6e2eddb", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "resource=2.1" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1989, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/policies?_queryFilter=true" - }, - "response": { - "bodySize": 4112, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 4112, - "text": "{\"result\":[{\"_id\":\"FeatureStorePolicy\",\"_rev\":\"1728915487133\",\"name\":\"FeatureStorePolicy\",\"active\":true,\"description\":\"FeatureStorePolicy\",\"resources\":[\"https://www.example.com:443/*\"],\"applicationName\":\"test-policy-set\",\"actionValues\":{},\"subject\":{\"type\":\"NONE\"},\"resourceTypeUuid\":\"76656a38-5f8e-401b-83aa-4ccb74ce88d2\",\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":\"2024-10-14T14:18:07.133Z\",\"createdBy\":\"id=76618ff6-e851-433e-9704-9d2852a17b7a,ou=user,ou=am-config\",\"creationDate\":\"2024-07-12T15:25:19.248Z\"},{\"_id\":\"Test Policy\",\"_rev\":\"1728915487679\",\"name\":\"Test Policy\",\"active\":false,\"description\":\"Test Policy Description\",\"resources\":[\"lorem://ipsum:dolor/sit\"],\"applicationName\":\"test-policy-set\",\"actionValues\":{\"POST\":false,\"GET\":true},\"subject\":{\"type\":\"NONE\"},\"condition\":{\"type\":\"AND\",\"conditions\":[{\"type\":\"SimpleTime\",\"startTime\":\"12:00\",\"endTime\":\"11:59\",\"startDay\":\"mon\",\"endDay\":\"fri\",\"startDate\":\"2023:08:01\",\"endDate\":\"2023:08:02\",\"enforcementTimeZone\":\"GMT\"},{\"type\":\"Script\",\"scriptId\":\"59f84396-71e4-4c1d-a6ae-c4fc624d9752\"}]},\"resourceTypeUuid\":\"76656a38-5f8e-401b-83aa-4ccb74ce88d2\",\"resourceAttributes\":[{\"type\":\"Static\",\"propertyName\":\"Test_Name\",\"propertyValues\":[\"Test_Value\"]}],\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":\"2024-10-14T14:18:07.679Z\",\"createdBy\":\"id=76618ff6-e851-433e-9704-9d2852a17b7a,ou=user,ou=am-config\",\"creationDate\":\"2024-07-12T15:25:19.356Z\"},{\"_id\":\"HR-webapp\",\"_rev\":\"1730139285314\",\"name\":\"HR-webapp\",\"active\":true,\"description\":\"\",\"resources\":[\"*://*:*/apps/hrlite/*\",\"*://*:*/apps/hrlite?*\",\"*://*:*/apps/contractor\",\"*://*:*/apps/contractor/*\",\"*://*:*/apps/contractor?*\",\"*://*:*/apps/hrlite\"],\"applicationName\":\"EdgePolicySet\",\"actionValues\":{\"POST\":true,\"GET\":true},\"subject\":{\"type\":\"Identity\",\"subjectValues\":[\"id=hradmins,ou=group,o=alpha,ou=services,ou=am-config\"]},\"resourceTypeUuid\":\"76656a38-5f8e-401b-83aa-4ccb74ce88d2\",\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":\"2024-10-28T18:14:45.314Z\",\"createdBy\":\"id=76618ff6-e851-433e-9704-9d2852a17b7a,ou=user,ou=am-config\",\"creationDate\":\"2024-07-12T15:25:50.1Z\"},{\"_id\":\"actions\",\"_rev\":\"1730139285907\",\"name\":\"actions\",\"active\":true,\"description\":\"\",\"resources\":[\"*://*:*/demo/api/action/actions\"],\"applicationName\":\"data\",\"actionValues\":{\"GET\":true},\"subject\":{\"type\":\"AuthenticatedUsers\"},\"resourceTypeUuid\":\"76656a38-5f8e-401b-83aa-4ccb74ce88d2\",\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":\"2024-10-28T18:14:45.907Z\",\"createdBy\":\"id=76618ff6-e851-433e-9704-9d2852a17b7a,ou=user,ou=am-config\",\"creationDate\":\"2024-07-12T15:25:50.202Z\"},{\"_id\":\"activity\",\"_rev\":\"1730139286064\",\"name\":\"activity\",\"active\":true,\"description\":\"\",\"resources\":[\"*://*:*/demo/api/action/activity\"],\"applicationName\":\"data\",\"actionValues\":{\"POST\":true,\"GET\":true},\"subject\":{\"type\":\"AuthenticatedUsers\"},\"resourceTypeUuid\":\"76656a38-5f8e-401b-83aa-4ccb74ce88d2\",\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":\"2024-10-28T18:14:46.64Z\",\"createdBy\":\"id=76618ff6-e851-433e-9704-9d2852a17b7a,ou=user,ou=am-config\",\"creationDate\":\"2024-07-12T15:25:50.288Z\"},{\"_id\":\"apply\",\"_rev\":\"1730139286214\",\"name\":\"apply\",\"active\":true,\"description\":\"\",\"resources\":[\"*://*:*/demo/api/action/apply\"],\"applicationName\":\"data\",\"actionValues\":{\"POST\":true},\"subject\":{\"type\":\"AuthenticatedUsers\"},\"condition\":{\"type\":\"Transaction\",\"authenticationStrategy\":\"AuthenticateToTreeConditionAdvice\",\"strategySpecifier\":\"Baseline-Transaction\"},\"resourceTypeUuid\":\"76656a38-5f8e-401b-83aa-4ccb74ce88d2\",\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":\"2024-10-28T18:14:46.214Z\",\"createdBy\":\"id=76618ff6-e851-433e-9704-9d2852a17b7a,ou=user,ou=am-config\",\"creationDate\":\"2024-07-12T15:25:50.368Z\"}],\"resultCount\":6,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=2.1, resource=2.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "4112" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:02 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 794, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.001Z", - "time": 65, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 65 - } - }, - { - "_id": "863f8f6e934a9d06b67c427853286b5a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=1.0,resource=2.1" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2079, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_sortKeys", - "value": "name" - }, - { - "name": "_queryFilter", - "value": "name eq \"^(?!sunAMDelegationService$).*\"" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/applications?_sortKeys=name&_queryFilter=name%20eq%20%22%5E%28%3F%21sunAMDelegationService%24%29.%2A%22" - }, - "response": { - "bodySize": 4684, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 4684, - "text": "{\"result\":[{\"resourceTypeUuids\":[\"76656a38-5f8e-401b-83aa-4ccb74ce88d2\"],\"name\":\"EdgePolicySet\",\"displayName\":null,\"description\":\"Policy Set EdgePolicySet\",\"attributeNames\":[],\"createdBy\":\"id=dsameuser,ou=user,ou=am-config\",\"conditions\":[\"Script\",\"ClientId\",\"AMIdentityMembership\",\"IPv6\",\"SimpleTime\",\"IPv4\",\"LEAuthLevel\",\"LDAPFilter\",\"AuthScheme\",\"Session\",\"AND\",\"Expiration\",\"AuthenticateToRealm\",\"ResourceEnvIP\",\"Policy\",\"SessionProperty\",\"OAuth2Scope\",\"OR\",\"Transaction\",\"NOT\",\"AuthLevel\",\"AuthenticateToService\"],\"subjects\":[\"AuthenticatedUsers\",\"NOT\",\"Identity\",\"Uma\",\"OR\",\"AND\",\"NONE\",\"Policy\",\"JwtClaim\"],\"editable\":true,\"resourceComparator\":null,\"applicationType\":\"iPlanetAMWebAgentService\",\"entitlementCombiner\":\"DenyOverride\",\"lastModifiedDate\":1730139285014,\"creationDate\":1669672555404,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"saveIndex\":null,\"searchIndex\":null},{\"resourceTypeUuids\":[\"76656a38-5f8e-401b-83aa-4ccb74ce88d2\"],\"name\":\"FeatureStorePolicySet\",\"displayName\":\"FeatureStorePolicySet\",\"description\":null,\"attributeNames\":[],\"createdBy\":\"id=8efaa5b6-8c98-4489-9b21-ee41f5589ab7,ou=user,ou=am-config\",\"conditions\":[\"AMIdentityMembership\",\"AND\",\"AuthLevel\",\"AuthScheme\",\"AuthenticateToRealm\",\"AuthenticateToService\",\"IPv4\",\"IPv6\",\"LDAPFilter\",\"LEAuthLevel\",\"NOT\",\"OAuth2Scope\",\"OR\",\"Policy\",\"ResourceEnvIP\",\"Script\",\"Session\",\"SessionProperty\",\"SimpleTime\",\"Transaction\"],\"subjects\":[\"AND\",\"AuthenticatedUsers\",\"Identity\",\"JwtClaim\",\"NONE\",\"NOT\",\"OR\",\"Policy\"],\"editable\":true,\"resourceComparator\":null,\"applicationType\":\"iPlanetAMWebAgentService\",\"entitlementCombiner\":\"DenyOverride\",\"lastModifiedDate\":1730139285661,\"creationDate\":1695912757709,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"saveIndex\":null,\"searchIndex\":null},{\"resourceTypeUuids\":[\"76656a38-5f8e-401b-83aa-4ccb74ce88d2\"],\"name\":\"data\",\"displayName\":\"Baseline Demo\",\"description\":null,\"attributeNames\":[],\"createdBy\":\"id=df492700-ba67-4345-83a9-58305850596c,ou=user,ou=am-config\",\"conditions\":[\"Script\",\"AMIdentityMembership\",\"IPv6\",\"IPv4\",\"SimpleTime\",\"LEAuthLevel\",\"LDAPFilter\",\"AuthScheme\",\"Session\",\"AND\",\"AuthenticateToRealm\",\"ResourceEnvIP\",\"Policy\",\"OAuth2Scope\",\"SessionProperty\",\"OR\",\"Transaction\",\"NOT\",\"AuthLevel\",\"AuthenticateToService\"],\"subjects\":[\"AuthenticatedUsers\",\"NOT\",\"Identity\",\"OR\",\"AND\",\"NONE\",\"Policy\",\"JwtClaim\"],\"editable\":true,\"resourceComparator\":null,\"applicationType\":\"iPlanetAMWebAgentService\",\"entitlementCombiner\":\"DenyOverride\",\"lastModifiedDate\":1730139285809,\"creationDate\":1610648242757,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"saveIndex\":null,\"searchIndex\":null},{\"resourceTypeUuids\":[\"d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b\"],\"name\":\"oauth2Scopes\",\"displayName\":\"Default OAuth2 Scopes Policy Set\",\"description\":\"The built-in Application used by the OAuth2 scope authorization process.\",\"attributeNames\":[],\"createdBy\":\"id=dsameuser,ou=user,ou=am-config\",\"conditions\":[\"Script\",\"AMIdentityMembership\",\"IPv6\",\"SimpleTime\",\"IPv4\",\"LEAuthLevel\",\"LDAPFilter\",\"AuthScheme\",\"Session\",\"AND\",\"AuthenticateToRealm\",\"ResourceEnvIP\",\"SessionProperty\",\"OAuth2Scope\",\"OR\",\"Transaction\",\"NOT\",\"AuthLevel\",\"AuthenticateToService\"],\"subjects\":[\"AuthenticatedUsers\",\"NOT\",\"Identity\",\"OR\",\"AND\",\"NONE\",\"JwtClaim\"],\"editable\":true,\"resourceComparator\":null,\"applicationType\":\"iPlanetAMWebAgentService\",\"entitlementCombiner\":\"DenyOverride\",\"lastModifiedDate\":1730139286442,\"creationDate\":1578580064992,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"saveIndex\":null,\"searchIndex\":null},{\"resourceTypeUuids\":[\"76656a38-5f8e-401b-83aa-4ccb74ce88d2\"],\"name\":\"test-policy-set\",\"displayName\":\"Test Policy Set\",\"description\":\"Test Policy Set Description\",\"attributeNames\":[],\"createdBy\":\"id=fbdeb2a9-beb6-4a14-ae66-e35f16ce421d,ou=user,ou=am-config\",\"conditions\":[\"AMIdentityMembership\",\"AND\",\"AuthLevel\",\"AuthScheme\",\"AuthenticateToRealm\",\"AuthenticateToService\",\"IPv4\",\"IPv6\",\"LDAPFilter\",\"LEAuthLevel\",\"NOT\",\"OAuth2Scope\",\"OR\",\"Policy\",\"ResourceEnvIP\",\"Script\",\"Session\",\"SessionProperty\",\"SimpleTime\",\"Transaction\"],\"subjects\":[\"AND\",\"AuthenticatedUsers\",\"Identity\",\"JwtClaim\",\"NONE\",\"NOT\",\"OR\",\"Policy\"],\"editable\":true,\"resourceComparator\":null,\"applicationType\":\"iPlanetAMWebAgentService\",\"entitlementCombiner\":\"DenyOverride\",\"lastModifiedDate\":1728915486893,\"creationDate\":1693494279401,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"saveIndex\":null,\"searchIndex\":null}],\"resultCount\":5,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=1.0,resource=2.1, resource=2.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "4684" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:02 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 794, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.072Z", - "time": 95, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 95 - } - }, - { - "_id": "7e1f05ed3289307a999a0e9dae4901aa", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=1.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2078, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_sortKeys", - "value": "name" - }, - { - "name": "_queryFilter", - "value": "name eq \"^(?!Delegation Service$).*\"" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/resourcetypes?_sortKeys=name&_queryFilter=name%20eq%20%22%5E%28%3F%21Delegation%20Service%24%29.%2A%22" - }, - "response": { - "bodySize": 3600, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 3600, - "text": "{\"result\":[{\"uuid\":\"993eba78-1c3f-4f27-b205-b4b29418f831\",\"name\":\"FrodoTestResourceType11\",\"description\":\"Frodo Test Resource Type Eleven\",\"patterns\":[\"pattern2://*:*/*?*\",\"pattern1://*:*/*\"],\"actions\":{\"action2\":true,\"action1\":true},\"createdBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"creationDate\":1725916400290,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":1728915478164},{\"uuid\":\"3fc799d7-b73f-49e0-a70b-e37990e54e56\",\"name\":\"FrodoTestResourceType12\",\"description\":\"Frodo Test Resource Type Twelve\",\"patterns\":[\"pattern2://*:*/*?*\",\"pattern1://*:*/*\"],\"actions\":{\"action2\":true,\"action1\":true},\"createdBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"creationDate\":1725916400511,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":1728915478723},{\"uuid\":\"0aa5ed25-0c62-4ff5-9a42-3bda8c5cbb76\",\"name\":\"FrodoTestResourceType13\",\"description\":\"Frodo Test Resource Type Thirteen\",\"patterns\":[\"pattern2://*:*/*?*\",\"pattern1://*:*/*\"],\"actions\":{\"action2\":true,\"action1\":true},\"createdBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"creationDate\":1725916400601,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":1728915479106},{\"uuid\":\"119b291c-40b3-4b1e-8d84-c2a561a2cb1f\",\"name\":\"FrodoTestResourceType14\",\"description\":\"Frodo Test Resource Type Fourteen\",\"patterns\":[\"pattern2://*:*/*?*\",\"pattern1://*:*/*\"],\"actions\":{\"action2\":true,\"action1\":true},\"createdBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"creationDate\":1725916400702,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":1728915479259},{\"uuid\":\"3c5f13af-ca17-403e-b47d-d15263cce954\",\"name\":\"FrodoTestResourceType15\",\"description\":\"Frodo Test Resource Type Fifteen\",\"patterns\":[\"pattern2://*:*/*?*\",\"pattern1://*:*/*\"],\"actions\":{\"action2\":true,\"action1\":true},\"createdBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"creationDate\":1725916400790,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":1728915479417},{\"uuid\":\"d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b\",\"name\":\"OAuth2 Scope\",\"description\":\"The built-in OAuth2 Scope Resource Type for OAuth2policy-provided scope.\",\"patterns\":[\"*://*:*/*\",\"*://*:*/*?*\",\"*\"],\"actions\":{\"GRANT\":true},\"createdBy\":\"id=dsameuser,ou=user,ou=am-config\",\"creationDate\":1595479030586,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":1728915479805},{\"uuid\":\"76656a38-5f8e-401b-83aa-4ccb74ce88d2\",\"name\":\"URL\",\"description\":\"The built-in URL Resource Type available to OpenAMPolicies.\",\"patterns\":[\"*://*:*/*\",\"*://*:*/*?*\"],\"actions\":{\"HEAD\":true,\"DELETE\":true,\"POST\":true,\"GET\":true,\"OPTIONS\":true,\"PUT\":true,\"PATCH\":true},\"createdBy\":\"id=dsameuser,ou=user,ou=am-config\",\"creationDate\":1595479030487,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":1728915479980},{\"uuid\":\"1f445c60-0828-41ac-9a4e-a16c026e9536\",\"name\":\"test_resource\",\"description\":\"\",\"patterns\":[\"type1/node1\",\"type2/node2\"],\"actions\":{\"allow\":true},\"createdBy\":\"id=1e9280f6-eab6-467e-889c-83d147c8b936,ou=user,ou=am-config\",\"creationDate\":1725916543746,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":1728915480141}],\"resultCount\":8,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=1.0,resource=1.0, resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "3600" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:02 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 794, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.173Z", - "time": 112, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 112 - } - }, - { - "_id": "b7e5f03e029a842be23c2a1356d9c4b3", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2001, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/scripts?_queryFilter=true" - }, - "response": { - "bodySize": 389179, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 389179, - "text": "{\"result\":[{\"_id\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"name\":\"Microsoft Profile Normalization\",\"description\":\"Normalizes raw profile data from Microsoft\",\"script\":\"IlwiLypcXG4gKiBDb3B5cmlnaHQgMjAyMCBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcXG4gKlxcbiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuXFxuICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdFxcbiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLlxcbiAqL1xcblxcbi8qXFxue1xcbiAgICBcXFwiQG9kYXRhLmNvbnRleHRcXFwiOiBcXFwiaHR0cHM6Ly9ncmFwaC5taWNyb3NvZnQuY29tL3YxLjAvJG1ldGFkYXRhI3VzZXJzLyRlbnRpdHlcXFwiLFxcbiAgICBcXFwiQG9kYXRhLmlkXFxcIjogXFxcImh0dHBzOi8vZ3JhcGgubWljcm9zb2Z0LmNvbS92Mi83MTFmZmE5Yy01OTcyLTQ3MTMtYWNlMy02ODhjOTczMjYxNGEvZGlyZWN0b3J5T2JqZWN0cy83ZDc3NTllMi0zNmQ4LTRlNjQtYjE3My0zZjg5MGQ3ZDQ2ZDYvTWljcm9zb2Z0LkRpcmVjdG9yeVNlcnZpY2VzLlVzZXJcXFwiLFxcbiAgICBcXFwiYnVzaW5lc3NQaG9uZXNcXFwiOiBbXFxuICAgICAgICBcXFwiMTgwMTQ3MzU0NTFcXFwiXFxuICAgIF0sXFxuICAgIFxcXCJkaXNwbGF5TmFtZVxcXCI6IFxcXCJWb2xrZXIgU2NoZXViZXJcXFwiLFxcbiAgICBcXFwiZ2l2ZW5OYW1lXFxcIjogXFxcIlZvbGtlclxcXCIsXFxuICAgIFxcXCJqb2JUaXRsZVxcXCI6IG51bGwsXFxuICAgIFxcXCJtYWlsXFxcIjogXFxcInZzY2hldWJlckB2c2NoZXViZXIub25taWNyb3NvZnQuY29tXFxcIixcXG4gICAgXFxcIm1vYmlsZVBob25lXFxcIjogbnVsbCxcXG4gICAgXFxcIm9mZmljZUxvY2F0aW9uXFxcIjogbnVsbCxcXG4gICAgXFxcInByZWZlcnJlZExhbmd1YWdlXFxcIjogbnVsbCxcXG4gICAgXFxcInN1cm5hbWVcXFwiOiBcXFwiU2NoZXViZXJcXFwiLFxcbiAgICBcXFwidXNlclByaW5jaXBhbE5hbWVcXFwiOiBcXFwidnNjaGV1YmVyQHZzY2hldWJlci5vbm1pY3Jvc29mdC5jb21cXFwiLFxcbiAgICBcXFwiaWRcXFwiOiBcXFwiN2Q3NzU5ZTItMzZkOC00ZTY0LWIxNzMtM2Y4OTBkN2Q0NmQ2XFxcIlxcbn1cXG4gKi9cXG5cXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGRcXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvblxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3RcXG5cXG5sb2dnZXIubWVzc2FnZShcXFwiS2F1YWkgTWljcm9zb2Z0IFByb2ZpbGUgTm9ybWFsaXphdGlvbjogcmF3UHJvZmlsZT17fVxcXCIsIHJhd1Byb2ZpbGUpXFxuXFxucmV0dXJuIGpzb24ob2JqZWN0KFxcbiAgICAgICAgZmllbGQoXFxcImlkXFxcIiwgcmF3UHJvZmlsZS5pZCksXFxuICAgICAgICBmaWVsZChcXFwiZGlzcGxheU5hbWVcXFwiLCByYXdQcm9maWxlLmRpc3BsYXlOYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJnaXZlbk5hbWVcXFwiLCByYXdQcm9maWxlLmdpdmVuTmFtZSksXFxuICAgICAgICBmaWVsZChcXFwiZmFtaWx5TmFtZVxcXCIsIHJhd1Byb2ZpbGUuc3VybmFtZSksXFxuICAgICAgICBmaWVsZChcXFwiZW1haWxcXFwiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJ1c2VybmFtZVxcXCIsIHJhd1Byb2ZpbGUudXNlclByaW5jaXBhbE5hbWUpLFxcbiAgICAgICAgZmllbGQoXFxcImdyb3Vwc1xcXCIsIHJhd1Byb2ZpbGUuZ3JvdXBzKSkpXCJcbiI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"91d197de-5916-4dca-83b5-9a4df26e7159\",\"name\":\"WordPress Profile Normalization\",\"description\":\"Normalizes raw profile data from WordPress\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJuYW1lKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5hdmF0YXJfVVJMKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkpCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6b3cfd48-62d3-48ff-a96f-fe8f3a22ab30\",\"name\":\"Amazon Profile Normalization\",\"description\":\"Normalizes raw profile data from Amazon\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQo=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"69f06e63-128c-4e2f-af52-079a8a6f448b\",\"name\":\"SAML2 SP Adapter Script\",\"description\":\"Default global script for SAML2 SP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"424da748-82cc-4b54-be6f-82bd64d82a74\",\"name\":\"Yahoo Profile Normalization\",\"description\":\"Normalizes raw profile data from Yahoo\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkpCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"8e298710-b55e-4085-a464-88a375a4004b\",\"name\":\"Twitter Profile Normalization\",\"description\":\"Normalizes raw profile data from Twitter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkX3N0ciksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnByb2ZpbGVfaW1hZ2VfdXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnNjcmVlbl9uYW1lKSkpCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"400e48ba-3f13-4144-ac7b-f824ea8e98c5\",\"name\":\"OAuth2 JWT Issuer Script\",\"description\":\"Default global script for scripted JWT Issuers\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgdG8gZGVyaXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGR5bmFtaWMgSldUIGlzc3VlciBmcm9tIHRoZSBpc3N1ZXIgc3RyaW5nLgogKiBBIEpXVCBpc3N1ZXIgaXMgbWFkZSB1cCBvZiB0aGUgZm9sbG93aW5nOgogKiAgIC0gaXNzdWVyIC0gdGhlIGlkZW50aWZpZXIgb2YgdGhlIGVudGl0eSB0aGF0IGlzc3VlcyBKV1RzCiAqICAgLSByZXNvdXJjZSBvd25lciBzdWJqZWN0IGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZSBvd25lcgogKiAgIC0gY29uc2VudGVkIHNjb3BlIGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCByZXByZXNlbnRzIHNjb3BlIHRoYXQgdGhlIHJlc291cmNlIG93bmVyCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYWxyZWFkeSBjb25zZW50ZWQgdG8gZXh0ZXJuYWxseQogKiAgIC0gYXV0aG9yaXplZCBzdWJqZWN0cyAtIHRoZSBzZXQgb2YgcHJpbmNpcGFsIGlkZW50aWZpZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQgdG8gYmUgdXNlZCBhcyByZXNvdXJjZSBvd25lcnMKICogICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgaXNzdWVyCiAqICAgLSBKV0tzIC0gZWl0aGVyIGEgc2V0IG9mIEpXS3Mgb3IgY29ubmVjdGlvbiBkZXRhaWxzIGZvciBvYnRhaW5pbmcgdGhhdCBzZXQsIHRoYXQgYXJlIHRoZSBwdWJsaWMga2V5cyB0aGF0CiAqICAgICAgICAgICAgY2FuIHZlcmlmeSB0aGUgc2lnbmF0dXJlIG9uIHRoZSBpc3N1ZWQgSldUcy4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIGlzc3VlciAtIFN0cmluZwogKiAgICAgICAgICBUaGUgaXNzdWVyIGZyb20gdGhlIGJlYXJlciBKV1QuCiAqIHJlYWxtIC0gU3RyaW5nCiAqICAgICAgICAgVGhlIHBhdGggb2YgdGhlIHJlYWxtIHRoYXQgaXMgaGFuZGxpbmcgdGhlIHJlcXVlc3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIHNjcmlwdCBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5PQVVUSDJfU0NSSVBURURfSldUX0lTU1VFUi4KICogaHR0cENsaWVudCAtIEhUVFAgQ2xpZW50ICgxKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgSFRUUCBDbGllbnQgaW5zdGFuY2U6CiAqICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC4KICogaWRSZXBvc2l0b3J5IC0gSWRlbnRpdHkgUmVwb3NpdG9yeSAoMikuIEFsd2F5cyBwcmVzZW50LgogKiBzZWNyZXRzIC0gU2VjcmV0cyBhY2Nlc3NvciAoMykuIEFsd2F5cyBwcmVzZW50LgogKgogKiBSZXR1cm4gLSBvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLlRydXN0ZWRKd3RJc3N1ZXJDb25maWcgKDQpIC0gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRydXN0ZWQgSldUIGlzc3Vlci4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgyKSBTY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuYW0vc2NyaXB0aW5nL2FwaS9pZGVudGl0eS9TY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeS5odG1sLgogKiAoMykgU2NyaXB0ZWRTZWNyZXRzIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5hbS9zY3JpcHRpbmcvYXBpL3NlY3JldHMvU2NyaXB0ZWRTZWNyZXRzLmh0bWwuCiAqICg0KSBUcnVzdGVkSnd0SXNzdWVyQ29uZmlnIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1RydXN0ZWRKd3RJc3N1ZXJDb25maWcuaHRtbC4KICovCgovKiBFWEFNUExFCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVHJ1c3RlZEp3dElzc3VlckNvbmZpZywKICAgICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbnMKICAgICk7CgogICAgdmFyIGlzcyA9IGlkUmVwb3NpdG9yeS5nZXRJZGVudGl0eShpc3N1ZXIpOwogICAgaWYgKGlzcyA9PSBudWxsKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGlzc3VlciBmb3VuZCBmb3I6ICcraXNzdWVyKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxvZ2dlci5tZXNzYWdlKCdGb3VuZCBpc3N1ZXI6ICcraXNzKTsKICAgIC8vIGluIHRoaXMgZXhhbXBsZSBlaXRoZXIgYSBKV0sgc2V0IG9yIGEgVVJJIHRvIGEgSldLIHNldCBhcmUgaW4gdGhlIHBvc3RhbEFkZHJlc3MgYXR0cmlidXRlCiAgICB2YXIgandrc0F0dHJzID0gaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygncG9zdGFsQWRkcmVzcycpOwogICAgdmFyIGp3a1NldCA9IGp3a3NBdHRycy5sZW5ndGggPT09IDAgPyBudWxsIDogandrc0F0dHJzWzBdOwogICAgdmFyIGNvbmZpZyA9IG5ldyBmckphdmEuVHJ1c3RlZEp3dElzc3VlckNvbmZpZygKICAgICAgICBpc3N1ZXIsCiAgICAgICAgJ3N1YicsCiAgICAgICAgJ3Njb3BlJywKICAgICAgICAvLyBpbiB0aGlzIGV4YW1wbGUsIHZhbGlkIHN1YmplY3RzIGFyZSBzdG9yZWQgaW4gdGhlIG1haWwgYXR0cmlidXRlCiAgICAgICAgaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygnbWFpbCcpLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCd7JykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCdodHRwJykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgICc1IG1pbnV0ZXMnLAogICAgICAgICcxIG1pbnV0ZScKICAgICk7CiAgICByZXR1cm4gY29uZmlnOwp9KCkpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_SCRIPTED_JWT_ISSUER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e232cff3-2460-47cd-80b2-36c86c0d0f06\",\"name\":\"Alpha endUserUIClient OAuth2 Access Token Modification Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykgfHwgc2NvcGVzLmNvbnRhaW5zKCdmcjppZGM6YW5hbHl0aWNzOionKSkgewogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBjb20uc3VuLmlkZW50aXR5LmlkbS5JZFR5cGUKICAgICk7CiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBpZGVudGl0eS5nZXRNZW1iZXJzaGlwcyhmci5JZFR5cGUuR1JPVVApLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkgewogICAgICBncm91cHMucHVzaChncm91cC5nZXRBdHRyaWJ1dGUoJ2NuJykudG9BcnJheSgpWzBdKTsKICAgIH0pOwogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"name\":\"Alpha OIDC Claims Script\",\"description\":\"Default alpha realm script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"248b8a56-df81-4b1b-b4ba-45d994f6504c\",\"name\":\"SAML2 IDP Adapter Script\",\"description\":\"Default global script for SAML2 IDP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9TQU1MMklkZW50aXR5UHJvdmlkZXJBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBJZHBBZGFwdGVyU2NyaXB0SGVscGVyICgxKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgSWRwQWRhcHRlclNjcmlwdEhlbHBlciBjb250YWluaW5nIGhlbHBlciBtZXRob2RzLiBTZWUgSmF2YWRvYyBmb3IgbW9yZSBkZXRhaWxzLgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgyKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDMpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDQpCiAqICAgICBUaGUgb3JpZ2luYWwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IGZyb20gU1AKICogcmVxSWQgLSBTdHJpbmcKICogICAgIFRoZSBpZCB0byB1c2UgZm9yIGNvbnRpbnVhdGlvbiBvZiBwcm9jZXNzaW5nIGlmIHRoZSBhZGFwdGVyIHJlZGlyZWN0cwogKiByZXMgLSBSZXNwb25zZSAoNSkKICogICAgIFRoZSBTQU1MIFJlc3BvbnNlCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNikKICogICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLiBUaGUgcmVmZXJlbmNlIHR5cGUgb2YgdGhpcyBpcyBPYmplY3QgYW5kIHdvdWxkIG5lZWQgdG8gYmUgY2FzdGVkIHRvIFNTT1Rva2VuLgogKiByZWxheVN0YXRlIC0gU3RyaW5nCiAqICAgICBUaGUgcmVsYXlTdGF0ZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcmVkaXJlY3QKICogZmF1bHRDb2RlIC0gU3RyaW5nCiAqICAgICB0aGUgZmF1bHQgY29kZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogZmF1bHREZXRhaWwgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBkZXRhaWwgdGhhdCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBTQU1MIHJlc3BvbnNlCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwuCiAqICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuPHNjcmlwdCBuYW1lPgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb24gKDcpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL0F1dGhuUmVxdWVzdC5odG1sLgogKiAoNSkgUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvUmVzcG9uc2UuaHRtbC4KICogKDYpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBJRFAgQWRhcHRlciBzY3JpcHRlZCBwbHVnaW4uCiAqLwoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2luZ2xlU2lnbk9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlU2lnbk9uICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlQXV0aGVudGljYXRpb246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVBdXRoZW50aWNhdGlvbiAoKSB7CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNlbmRSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgcmVxSWQKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIGJyb3dzZXIgcmVkaXJlY3Rpb24gaGFwcGVuZWQgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2VuZFJlc3BvbnNlICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2lnblJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIHJlcwogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTaWduUmVzcG9uc2UgKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgZmF1bHRDb2RlCiAqICAgICBmYXVsdERldGFpbAogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlICgpIHsKfQo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"60609c1a-4cef-4729-a417-354aafdebf3f\",\"name\":\"LINE Profile Normalization\",\"description\":\"Normalizes raw profile data from LINE\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjQgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCi8vIExJTkUgZG9lcyBub3QgcmV0dXJuIHRoZSBlbWFpbCBmcm9tIHRoZSB1c2VySW5mbyBlbmRwb2ludCBidXQgc2hvdWxkIHJldHVybiBpdCBmcm9tIHRoZSB0b2tlbiBlbmRwb2ludCBhbmQgdGhlcmVmb3JlCi8vIGl0IHNob3VsZCBiZSBzZXQgaW4gdGhlIHNoYXJlZCBzdGF0ZQp2YXIgZW1haWwgPSAiIgp2YXIgc3ViamVjdElkID0gcmF3UHJvZmlsZS5zdWIKdmFyIHVzZXJuYW1lID0gc3ViamVjdElkCnZhciBmaXJzdE5hbWUgPSAiICIKdmFyIGxhc3ROYW1lID0gIiAiCgppZiAoc2hhcmVkU3RhdGUuZ2V0KCJjbGFpbXNfc2V0IikgIT0gbnVsbCAmJiBzaGFyZWRTdGF0ZS5nZXQoImNsYWltc19zZXQiKS5lbWFpbCAhPSBudWxsKSB7CiAgICBlbWFpbCA9IHNoYXJlZFN0YXRlLmdldCgiY2xhaW1zX3NldCIpLmVtYWlsCiAgICB1c2VybmFtZSA9IGVtYWlsCn0KCmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgibmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkgewogICAgdmFyIHNwbGl0TmFtZSA9IHJhd1Byb2ZpbGUubmFtZS5hc1N0cmluZygpLnNwbGl0KCIgIikKICAgIGZpcnN0TmFtZSA9IHNwbGl0TmFtZVswXQogICAgbGFzdE5hbWUgPSBzcGxpdE5hbWVbLTFdCn0KCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIGVtYWlsKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgZmlyc3ROYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIGxhc3ROYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCB1c2VybmFtZSkpKQo=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"472534ec-a25f-468d-a606-3fb1935190df\",\"name\":\"WeChat Profile Normalization\",\"description\":\"Normalizes raw profile data from WeChat\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLm9wZW5pZCksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uaWNrbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5oZWFkaW1ndXJsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLm5pY2tuYW1lKSkpCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"d58977ed-0542-4147-8197-973ef7300191\",\"name\":\"Custom Device Match Script\",\"description\":\"Custom Device Match Script\",\"script\":\"LyoKICogQ3VzdG9tIERldmljZSBNYXRjaCBTY3JpcHQKICovCgpvdXRjb21lID0gInRydWUiOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"name\":\"mode\",\"description\":\"Check if mode has already been set.\",\"script\":\"LyogbW9kZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb2xsZWN0IG1vZGUgaWYgbm90IGFscmVhZHkgc2V0IGFuZCBzZXQgb3V0Y29tZSB0byBtb2RlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSAnc2hhcmVkIGFuZCBsZXZlbCcKICogLSAnc2hhcmVkIG9ubHknCiAqIC0gJ2xldmVsIG9ubHknCiAqIC0gJ25vbmUnCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBtb2RlID0gbm9kZVN0YXRlLmdldCgnbW9kZScpOwogIGlmIChtb2RlKSB7CiAgICBvdXRjb21lID0gbW9kZS5hc1N0cmluZygpOwogICAgdmFyIGxldmVsID0gbm9kZVN0YXRlLmdldCgnbGV2ZWwnKS5hc0ludGVnZXIoKSArIDE7CiAgICBsb2dnZXIuZXJyb3IoJ21vZGU6IG1vZGU9JyArIG1vZGUuYXNTdHJpbmcoKSArICcsIGxldmVsPScgKyBsZXZlbCk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoJ2xldmVsJywgbGV2ZWwpOwogIH0KICBlbHNlIHsKICAgIHZhciBjaG9pY2VzID0gWydzaGFyZWQgYW5kIGxldmVsJywgJ3NoYXJlZCBvbmx5JywgJ2xldmVsIG9ubHknLCAnbm9uZSddOwogIAogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DaG9pY2VDYWxsYmFjawogICAgKQoKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKFsKICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soJ0Nob29zZSB0ZXN0IG1vZGUnLCBjaG9pY2VzLCAwLCBmYWxzZSkKICAgICAgXSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBjaG9pY2UgPSBwYXJzZUludChjYWxsYmFja3MuZ2V0KDApLmdldFNlbGVjdGVkSW5kZXhlcygpWzBdKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgnbW9kZScsIGNob2ljZXNbY2hvaWNlXSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2xldmVsJywgMCk7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKGNob2ljZXNbY2hvaWNlXSkuYnVpbGQoKTsKICAgIH0KICB9Cn0oKSk7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"ed685f9f-5909-4726-86e8-22bd38b47663\",\"name\":\"Normalized Profile to Identity\",\"description\":\"Converts a normalized social profile into an Identity\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgaWRlbnRpdHkgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgiY24iLCBub3JtYWxpemVkUHJvZmlsZS5kaXNwbGF5TmFtZSksCiAgICAgICAgZmllbGQoInVzZXJOYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUudXNlcm5hbWUpLAogICAgICAgIGZpZWxkKCJpcGxhbmV0LWFtLXVzZXItYWxpYXMtbGlzdCIsIHNlbGVjdGVkSWRwICsgJy0nICsgbm9ybWFsaXplZFByb2ZpbGUuaWQuYXNTdHJpbmcoKSkpKQoKcmV0dXJuIGlkZW50aXR5Cg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"b4f3facb-c754-4e7f-b1c0-f4d46f592126\",\"name\":\"LinkedIn Profile Normalization\",\"description\":\"Normalizes raw profile data from LinkedIn\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjQgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5maWVsZAppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvbgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUub2JqZWN0CgpyZXR1cm4ganNvbihvYmplY3QoCiAgICAgICAgZmllbGQoImlkIiwgcmF3UHJvZmlsZS5zdWIpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZ2l2ZW5fbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmZhbWlseV9uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJlbWFpbFZlcmlmaWVkIiwgcmF3UHJvZmlsZS5lbWFpbF92ZXJpZmllZCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQo=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3bd13a46-61c4-4974-8efb-1700c80c64e3\",\"name\":\"Inactive Device Match Script\",\"description\":\"Inactive Device Match Script\",\"script\":\"LyoKICogSW5hY3RpdmUgRGV2aWNlIE1hdGNoIFNjcmlwdAogKi8KCm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"8862ca8f-7770-4af5-a888-ac0df0947f36\",\"name\":\"LinkedIn Profile Normalization\",\"description\":\"Normalizes raw profile data from LinkedIn\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5maXJzdE5hbWUubG9jYWxpemVkLmdldCgwKSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3ROYW1lLmxvY2FsaXplZC5nZXQoMCkpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucHJvZmlsZVBpY3R1cmUuZGlzcGxheUltYWdlKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVsZW1lbnRzLmdldCgwKS5nZXQoImhhbmRsZX4iKS5lbWFpbEFkZHJlc3MpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZWxlbWVudHMuZ2V0KDApLmdldCgiaGFuZGxlfiIpLmVtYWlsQWRkcmVzcykpKQo=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3d97c436-42c0-4dd0-a571-ea6f34f752b3\",\"name\":\"Itsme Profile Normalization\",\"description\":\"Normalizes raw profile data from Itsme\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKaW1wb3J0IG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUKCkpzb25WYWx1ZSBtYW5hZ2VkVXNlciA9IGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuc3ViKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmdpdmVuX25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQpyZXR1cm4gbWFuYWdlZFVzZXIK\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"e1db8a0a-0329-4962-a5bf-ecffaca376ae\",\"name\":\"Alpha endUserUIClient OIDC Claims Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"7e3d7067-d50f-4674-8c76-a3e13a810c33\",\"name\":\"Scripted Module - Server Side\",\"description\":\"Default global script for server side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgp2YXIgU1RBUlRfVElNRSA9IDk7ICAvLyA5YW0KdmFyIEVORF9USU1FICAgPSAxNzsgLy8gNXBtCnZhciBsb25naXR1ZGUsIGxhdGl0dWRlOwp2YXIgbG9jYWxUaW1lOwoKbG9nZ2VyLm1lc3NhZ2UoIlN0YXJ0aW5nIHNjcmlwdGVkIGF1dGhlbnRpY2F0aW9uIik7CmxvZ2dlci5tZXNzYWdlKCJVc2VyOiAiICsgdXNlcm5hbWUpOwoKdmFyIHVzZXJQb3N0YWxBZGRyZXNzID0gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKTsKbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgYWRkcmVzczogIiArIHVzZXJQb3N0YWxBZGRyZXNzKTsKCmdldExvbmdpdHVkZUxhdGl0dWRlRnJvbVVzZXJQb3N0YWxBZGRyZXNzKCk7CmdldExvY2FsVGltZSgpOwoKbG9nZ2VyLm1lc3NhZ2UoIkN1cnJlbnQgdGltZSBhdCB0aGUgdXNlcnMgbG9jYXRpb246ICIgKyBsb2NhbFRpbWUuZ2V0SG91cnMoKSk7CmlmIChsb2NhbFRpbWUuZ2V0SG91cnMoKSA8IFNUQVJUX1RJTUUgfHwgbG9jYWxUaW1lLmdldEhvdXJzKCkgPiBFTkRfVElNRSkgewogICAgbG9nZ2VyLmVycm9yKCJMb2dpbiBmb3JiaWRkZW4gb3V0c2lkZSB3b3JrIGhvdXJzISIpOwogICAgYXV0aFN0YXRlID0gRkFJTEVEOwp9IGVsc2UgewogICAgbG9nZ2VyLm1lc3NhZ2UoIkF1dGhlbnRpY2F0aW9uIGFsbG93ZWQhIik7CiAgICBhdXRoU3RhdGUgPSBTVUNDRVNTOwp9CgpmdW5jdGlvbiBnZXRMb25naXR1ZGVMYXRpdHVkZUZyb21Vc2VyUG9zdGFsQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlclBvc3RhbEFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwogICAgICAvL3RoZSBhYm92ZSBVUkkgaGFzIHRvIGJlIGV4dGVuZGVkIHdpdGggYW4gQVBJX0tFWSBpZiB1c2VkIGluIGEgZnJlcXVlbnQgbWFubmVyCiAgICAgIC8vc2VlIGRvY3VtZW50YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9nZW9jb2RpbmcvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIGdlb2NvZGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIHZhciBpOwogICAgZm9yIChpID0gMDsgaSA8IGdlb2NvZGUucmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHQgPSBnZW9jb2RlLnJlc3VsdHNbaV07CiAgICAgICAgbGF0aXR1ZGUgPSByZXN1bHQuZ2VvbWV0cnkubG9jYXRpb24ubGF0OwogICAgICAgIGxvbmdpdHVkZSA9IHJlc3VsdC5nZW9tZXRyeS5sb2NhdGlvbi5sbmc7CgogICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJsYXRpdHVkZToiICsgbGF0aXR1ZGUgKyAiIGxvbmdpdHVkZToiICsgbG9uZ2l0dWRlKTsKICAgIH0KfQoKZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKCkgewoKICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICB2YXIgbG9jYXRpb24gPSAibG9jYXRpb249IiArIGxhdGl0dWRlICsgIiwiICsgbG9uZ2l0dWRlOwogICAgdmFyIHRpbWVzdGFtcCA9ICJ0aW1lc3RhbXA9IiArIG5vdzsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS90aW1lem9uZS9qc29uPyIgKyBsb2NhdGlvbiArICImIiArIHRpbWVzdGFtcCk7CiAgICAgIHJlcXVlc3Quc2V0TWV0aG9kKCJHRVQiKTsKICAgICAgLy90aGUgYWJvdmUgVVJJIGhhcyB0byBiZSBleHRlbmRlZCB3aXRoIGFuIEFQSV9LRVkgaWYgdXNlZCBpbiBhIGZyZXF1ZW50IG1hbm5lcgogICAgICAvL3NlZSBkb2N1bWVudGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vdGltZXpvbmUvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIHRpbWV6b25lID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICB2YXIgbG9jYWxUaW1lc3RhbXAgPSBwYXJzZUludChub3cpICsgcGFyc2VJbnQodGltZXpvbmUuZHN0T2Zmc2V0KSArIHBhcnNlSW50KHRpbWV6b25lLnJhd09mZnNldCk7CiAgICBsb2NhbFRpbWUgPSBuZXcgRGF0ZShsb2NhbFRpbWVzdGFtcCoxMDAwKTsKfQoKZnVuY3Rpb24gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKSB7CiAgICB2YXIgdXNlckFkZHJlc3NTZXQgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAicG9zdGFsQWRkcmVzcyIpOwogICAgaWYgKHVzZXJBZGRyZXNzU2V0ID09IG51bGwgfHwgdXNlckFkZHJlc3NTZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIGFkZHJlc3Mgc3BlY2lmaWVkIGZvciB1c2VyOiAiICsgdXNlcm5hbWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKQp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"da56fe60-8b38-4c46-a405-d6b306d4b336\",\"name\":\"OAuth2 Evaluate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Evaluation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcG9wdWxhdGUgdGhlIHNjb3BlcyB3aXRoIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlcyB3aGVuIHRoZSB0b2tlbmluZm8gZW5kcG9pbnQgaXMgY2FsbGVkLgogKiBGb3IgZXhhbXBsZSwgaWYgb25lIG9mIHRoZSBzY29wZXMgaXMgbWFpbCwgQU0gc2V0cyBtYWlsIHRvIHRoZSByZXNvdXJjZSBvd25lcidzIGVtYWlsIGFkZHJlc3MgaW4gdGhlIHRva2VuIGluZm9ybWF0aW9uIHJldHVybmVkLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDIpLgogKiAgICAgICAgICAgIFRoZSBjbGllbnQncyBpZGVudGl0eSBpZiBwcmVzZW50IG9yIHRoZSByZXNvdXJjZSBvd25lcidzIGlkZW50aXR5LiBDYW4gYmUgbnVsbC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0VWQUxVQVRFX1NDT1BFCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoMykuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIGEgTWFwPFN0cmluZywgT2JqZWN0PiBvZiB0aGUgYWNjZXNzIHRva2VuJ3MgaW5mb3JtYXRpb24gKDQpLgogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBBY2Nlc3NUb2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vYXV0aDIvY29yZS9BY2Nlc3NUb2tlbi5odG1sLgogKiAoMikgQU1JZGVudGl0eSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9pZG0vQU1JZGVudGl0eS5odG1sLgogKiAoMykgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBldmFsdWF0ZSBzY29wZSBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgbWFwID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7CiAgICBpZiAoaWRlbnRpdHkgIT09IG51bGwpIHsKICAgICAgICB2YXIgc2NvcGVzID0gYWNjZXNzVG9rZW4uZ2V0U2NvcGUoKS50b0FycmF5KCk7CiAgICAgICAgc2NvcGVzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKHNjb3BlKS50b0FycmF5KCk7CiAgICAgICAgICAgIG1hcC5wdXQoc2NvcGUsIGF0dHJpYnV0ZXMuam9pbigiLCIpKTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKCdpZGVudGl0eSBpcyBudWxsJyk7CiAgICB9CiAgICByZXR1cm4gbWFwOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_EVALUATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"name\":\"ADFS Profile Normalization (JS)\",\"description\":\"Normalizes raw profile data from ADFS\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIHRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIKICogaW4gYSBzdGFuZGFyZCBmb3JtIGV4cGVjdGVkIGJ5IHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogcmF3UHJvZmlsZSAtIFRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvdmlkZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIuCiAqICAgICAgICAgICAgICBKc29uVmFsdWUgKDEpLgogKiBsb2dnZXIgLSBUaGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIHJlcXVlc3RIZWFkZXJzIC0gVHJlZU1hcCAoMikuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBoZWFkZXJzIGluIHRoZSBsb2dpbiByZXF1ZXN0OgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1yZXF1ZXN0SGVhZGVycy4KICogcmVxdWVzdFBhcmFtZXRlcnMgLSBUcmVlTWFwICgyKS4KICogICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICogc2VsZWN0ZWRJZHAgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgVGhlIHNvY2lhbCBpZGVudGl0eSBwcm92aWRlciBuYW1lLiBGb3IgZXhhbXBsZTogZ29vZ2xlLgogKiBzaGFyZWRTdGF0ZSAtIExpbmtlZEhhc2hNYXAgKDMpLgogKiAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgYW5kIGFsbG93cyBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyBub2RlczoKICogICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoLW5vZGVzL2NvcmUtYWN0aW9uLmh0bWwjYWNjZXNzaW5nLXRyZWUtc3RhdGUuCiAqIHRyYW5zaWVudFN0YXRlIC0gTGlua2VkSGFzaE1hcCAoMykuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBmb3Igc3RvcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhdCBtdXN0IG5vdCBsZWF2ZSB0aGUgc2VydmVyIHVuZW5jcnlwdGVkLAogKiAgICAgICAgICAgICAgICAgIGFuZCB0aGF0IG1heSBub3QgbmVlZCB0byBwZXJzaXN0IGJldHdlZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uOgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGgtbm9kZXMvY29yZS1hY3Rpb24uaHRtbCNhY2Nlc3NpbmctdHJlZS1zdGF0ZS4KICoKICogUmV0dXJuIC0gYSBKc29uVmFsdWUgKDEpLgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqCiAqICAgICAgICAgIFRoaXMgc2NyaXB0J3MgbGFzdCBzdGF0ZW1lbnQgc2hvdWxkIHJlc3VsdCBpbiBhIEpzb25WYWx1ZSAoMSkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqICAgICAgICAgIHsKICogICAgICAgICAgICAgIHsiZGlzcGxheU5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZW1haWwiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZmFtaWx5TmFtZSI6ICJjb3JyZXNwb25kaW5nLXNvY2lhbC1pZGVudGl0eS1wcm92aWRlci12YWx1ZSJ9LAogKiAgICAgICAgICAgICAgeyJnaXZlbk5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiaWQiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsibG9jYWxlIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InBob3RvVXJsIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InVzZXJuYW1lIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0KICogICAgICAgICAgfQogKgogKiAgICAgICAgICBUaGUgY29uc3VtZXIgb2YgdGhpcyBkYXRhIGRlZmluZXMgd2hpY2gga2V5cyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBvcHRpb25hbC4KICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlIGFuZCwKICogICAgICAgICAgdWx0aW1hdGVseSwgdGhlIG1hbmFnZWQgb2JqZWN0IGNyZWF0ZWQvdXBkYXRlZCB3aXRoIHRoaXMgZGF0YQogKiAgICAgICAgICB3aWxsIGV4cGVjdCBjZXJ0YWluIGtleXMgdG8gYmUgcG9wdWxhdGVkLgogKiAgICAgICAgICBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eToKICogICAgICAgICAgdXNlcm5hbWUsIGdpdmVuTmFtZSwgZmFtaWx5TmFtZSwgZW1haWwuCiAqCiAqICAgICAgICAgIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKICogICAgICAgICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgZnJvbSB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBTZXQgKFVDUykuCiAqICAgICAgICAgIEEgemVyby1sZW5ndGggY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgcGVybWl0dGVkLgogKgogKiAoMSkgSnNvblZhbHVlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2pzb24vSnNvblZhbHVlLmh0bWwuCiAqICgyKSBUcmVlTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwuCiAqICgzKSBMaW5rZWRIYXNoTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQogICAgKTsKCiAgICB2YXIgbm9ybWFsaXplZFByb2ZpbGVEYXRhID0gZnJKYXZhLkpzb25WYWx1ZS5qc29uKGZySmF2YS5Kc29uVmFsdWUub2JqZWN0KCkpOwogIAogICAgICAvL2xvZ2dlci5tZXNzYWdlKCdTZWd1aW4gcmF3UHJvZmlsZTogJytyYXdQcm9maWxlKTsKCiAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KCdpZCcsIHJhd1Byb2ZpbGUuZ2V0KCdzdWInKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2Rpc3BsYXlOYW1lJywgcmF3UHJvZmlsZS5nZXQoJ2dpdmVuTmFtZScpLmFzU3RyaW5nKCkgKyAnICcgKyByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2VtYWlsJywgcmF3UHJvZmlsZS5nZXQoJ21haWwnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dpdmVuTmFtZScsIHJhd1Byb2ZpbGUuZ2V0KCdnaXZlbk5hbWUnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2ZhbWlseU5hbWUnLCByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ3VzZXJuYW1lJywgcmF3UHJvZmlsZS5nZXQoJ3VwbicpLmFzU3RyaW5nKCkpOwogICAgbm9ybWFsaXplZFByb2ZpbGVEYXRhLnB1dCgncm9sZXMnLCByYXdQcm9maWxlLmdldCgncm9sZXMnKS5hc1N0cmluZygpKTsKICAKICAgICAgLy9sb2dnZXIubWVzc2FnZSgnU2VndWluIG5vcm1hbGl6ZWRQcm9maWxlRGF0YTogJytub3JtYWxpemVkUHJvZmlsZURhdGEpOwoKICAgIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"2c38c998-aec0-4e56-8d46-bff6e24a704e\",\"name\":\"My Example Library\",\"description\":\"My Example Library\",\"script\":\"dmFyIGkgPSAwOwoKZnVuY3Rpb24gYWRkKGopIHtpICs9IGp9OwpmdW5jdGlvbiBsb2dUb3RhbChsb2cpIHsgbG9nLmluZm8oIlRvdGFsOiAiICsgaSkgfTsKCi8vIGV4cG9ydCBjb25zdGFudApleHBvcnRzLk1TRyA9ICdGaW5hbCBzdW0nOwoKLy8gZXhwb3J0IGZ1bmN0aW9ucwpleHBvcnRzLmFkZCA9IGFkZDsKZXhwb3J0cy5sb2dUb3RhbCA9IGxvZ1RvdGFsOwoKLy9kaXJlY3QgZXhwb3J0IHVzaW5nIGFuIGlubGluZSBkZWNsYXJhdGlvbgpleHBvcnRzLmxvZ1RvdGFsV2l0aE1lc3NhZ2UgPSAobG9nLCBtZXNzYWdlKSA9PiBsb2cuaW5mbyhtZXNzYWdlICsgIjogIiArIGkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"1d475815-72cb-42eb-aafd-4026989d28a7\",\"name\":\"Social Identity Provider Profile Transformation Script\",\"description\":\"Default global script for Social Identity Provider Profile Transformation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyogRGVmYXVsdCBTb2NpYWwgSWRlbnRpdHkgUHJvdmlkZXIgUHJvZmlsZSBUcmFuc2Zvcm1hdGlvbiBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzICovCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"85523e71-2d77-4577-b078-6f9674cc54e2\",\"name\":\"Saml2 IDP Adapter Always Auth\",\"description\":\"Always redirect browser pre-auth\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL1NBTUwySWRlbnRpdHlQcm92aWRlckFkYXB0ZXIuaHRtbAogKiBOb3RlIHRoYXQgdGhlIGluaXRpYWxpemUgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHNjcmlwdHMuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzLiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXZhaWxhYmxlIHRvIGl0LgogKgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZwogKiAgICAgRW50aXR5IElEIGZvciB0aGUgaG9zdGVkIElEUAogKiByZWFsbSAtIFN0cmluZwogKiAgICAgUmVhbG0gb2YgdGhlIGhvc3RlZCBJRFAKICogaWRwQWRhcHRlclNjcmlwdEhlbHBlciAtIElkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEpCiAqICAgICBBbiBpbnN0YW5jZSBvZiBJZHBBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIHJlcXVlc3QgLSBIdHRwU2VydmxldFJlcXVlc3QgKDIpCiAqICAgICBTZXJ2bGV0IHJlcXVlc3Qgb2JqZWN0CiAqIHJlc3BvbnNlIC0gSHR0cFNlcnZsZXRSZXNwb25zZSAoMykKICogICAgIFNlcnZsZXQgcmVzcG9uc2Ugb2JqZWN0CiAqIGF1dGhuUmVxdWVzdCAtIEF1dGhuUmVxdWVzdCAoNCkKICogICAgIFRoZSBvcmlnaW5hbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHNlbnQgZnJvbSBTUAogKiByZXFJZCAtIFN0cmluZwogKiAgICAgVGhlIGlkIHRvIHVzZSBmb3IgY29udGludWF0aW9uIG9mIHByb2Nlc3NpbmcgaWYgdGhlIGFkYXB0ZXIgcmVkaXJlY3RzCiAqIHJlcyAtIFJlc3BvbnNlICg1KQogKiAgICAgVGhlIFNBTUwgUmVzcG9uc2UKICogc2Vzc2lvbiAtIFNTT1Rva2VuICg2KQogKiAgICAgVGhlIHNpbmdsZSBzaWduLW9uIHNlc3Npb24uIFRoZSByZWZlcmVuY2UgdHlwZSBvZiB0aGlzIGlzIE9iamVjdCBhbmQgd291bGQgbmVlZCB0byBiZSBjYXN0ZWQgdG8gU1NPVG9rZW4uCiAqIHJlbGF5U3RhdGUgLSBTdHJpbmcKICogICAgIFRoZSByZWxheVN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZWRpcmVjdAogKiBmYXVsdENvZGUgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBjb2RlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgU0FNTCByZXNwb25zZQogKiBmYXVsdERldGFpbCAtIFN0cmluZwogKiAgICAgdGhlIGZhdWx0IGRldGFpbCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogbG9nZ2VyIC0gTG9nZ2VyIGluc3RhbmNlCiAqICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLjxzY3JpcHQgbmFtZT4KICoKICogVGhyb3dzIFNBTUwyRXhjZXB0aW9uICg3KToKICogICAgIGZvciBhbnkgZXhjZXB0aW9ucyBvY2N1cnJpbmcgaW4gdGhlIGFkYXB0ZXIuIFRoZSBmZWRlcmF0aW9uIHByb2Nlc3Mgd2lsbCBjb250aW51ZQogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBpZHBBZGFwdGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL1Jlc3BvbnNlLmh0bWwuCiAqICg2KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvY29tbW9uL1NBTUwyRXhjZXB0aW9uLmh0bWwuCiAqLwoKLyoKICogVGVtcGxhdGUvZGVmYXVsdCBzY3JpcHQgZm9yIFNBTUwyIElEUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTaW5nbGVTaWduT24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNpbmdsZVNpZ25PbiIpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZUF1dGhlbnRpY2F0aW9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlQXV0aGVudGljYXRpb24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZUF1dGhlbnRpY2F0aW9uIik7CiAgICByZXR1cm4gdHJ1ZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZFJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBoYXBwZW5lZCBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTZW5kUmVzcG9uc2UgKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNlbmRSZXNwb25zZSIpOwogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IGF1dGhuUmVxdWVzdDogIithdXRoblJlcXVlc3QpOwogICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QoImh0dHBzOi8vaWRjLnNjaGV1YmVyLmlvL2FtL1hVSS8/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPURpc3BhdGNoZXImRm9yY2VBdXRoPXRydWUmZ290bz0iK3JlbGF5U3RhdGUpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpZ25SZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICByZXMKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2lnblJlc3BvbnNlICgpIHsKICAgICAgbG9nZ2VyLmVycm9yKCJDaGljYWdvOiBwcmVTaWduUmVzcG9uc2UiKTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZEZhaWx1cmVSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGZhdWx0Q29kZQogKiAgICAgZmF1bHREZXRhaWwKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2VuZEZhaWx1cmVSZXNwb25zZSAoKSB7CiAgICAgIGxvZ2dlci5lcnJvcigiQ2hpY2FnbzogcHJlU2VuZEZhaWx1cmVSZXNwb25zZSIpOwp9Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"25e6c06d-cf70-473b-bd28-26931edc476b\",\"name\":\"OAuth2 Validate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Validation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgdmFsaWRhdGVzIHRoZSByZXF1ZXN0ZWQgc2NvcGVzIGFnYWluc3QgdGhlIGFsbG93ZWQgc2NvcGVzLgogKiBJZiBubyBzY29wZXMgYXJlIHJlcXVlc3RlZCwgZGVmYXVsdCBzY29wZXMgYXJlIGFzc3VtZWQuCiAqIFRoZSBzY3JpcHQgaGFzIGZvdXIgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgZGlmZmVyZW50IE9BdXRoMiBmbG93czoKICogICAgICAtIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlCiAqICAgICAgLSB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUKICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHJlcXVlc3RlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgVGhlIHNldCBvZiByZXF1ZXN0ZWQgc2NvcGVzLgogKiBkZWZhdWx0U2NvcGVzIC0gU2V0PFN0cmluZz4gKDEpLgogKiAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBkZWZhdWx0IHNjb3Blcy4KICogYWxsb3dlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgYWxsb3dlZCBzY29wZXMuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIGRlYnVnIGxvZ2dlciBpbnN0YW5jZToKICogICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgICAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9BVVRIMl9WQUxJREFURV9TQ09QRQogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKgogKiBUaHJvd3MgSW52YWxpZFNjb3BlRXhjZXB0aW9uOgogKiAgICAgIC0gaWYgdGhlcmUgYXJlIG5vIHNjb3BlcyByZXF1ZXN0ZWQgYW5kIGRlZmF1bHQgc2NvcGVzIGFyZSBlbXB0eQogKiAgICAgIC0gaWYgYSByZXF1ZXN0ZWQgc2NvcGUgaXMgbm90IGFsbG93ZWQKICoKICogUmV0dXJuIC0gYSBTZXQ8U3RyaW5nPiBvZiB2YWxpZGF0ZWQgc2NvcGVzICgxKS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICgyKSBDbGllbnQgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svaHR0cC9DbGllbnQuaHRtbC4KICovCgovKioKICogRGVmYXVsdCB2YWxpZGF0ZSBzY29wZSBzY3JpcHQuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZVNjb3BlcyAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkU2NvcGVFeGNlcHRpb24KICAgICk7CgogICAgdmFyIHNjb3BlczsKICAgIGlmIChyZXF1ZXN0ZWRTY29wZXMgPT0gbnVsbCB8fCByZXF1ZXN0ZWRTY29wZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgc2NvcGVzID0gZGVmYXVsdFNjb3BlczsKICAgIH0gZWxzZSB7CiAgICAgICAgc2NvcGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KGFsbG93ZWRTY29wZXMpOwogICAgICAgIHNjb3Blcy5yZXRhaW5BbGwocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICBpZiAocmVxdWVzdGVkU2NvcGVzLnNpemUoKSA+IHNjb3Blcy5zaXplKCkpIHsKICAgICAgICAgICAgdmFyIGludmFsaWRTY29wZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICAgICAgaW52YWxpZFNjb3Blcy5yZW1vdmVBbGwoYWxsb3dlZFNjb3Blcyk7CiAgICAgICAgICAgIHRocm93IG5ldyBmckphdmEuSW52YWxpZFNjb3BlRXhjZXB0aW9uKCdVbmtub3duL2ludmFsaWQgc2NvcGUocyknKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHNjb3BlcyA9PSBudWxsIHx8IHNjb3Blcy5pc0VtcHR5KCkpIHsKICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRTY29wZUV4Y2VwdGlvbignTm8gc2NvcGUgcmVxdWVzdGVkIGFuZCBubyBkZWZhdWx0IHNjb3BlIGNvbmZpZ3VyZWQnKTsKICAgIH0KICAgIHJldHVybiBzY29wZXM7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlICgpIHsKICAgIHJldHVybiB2YWxpZGF0ZVNjb3BlcygpOwp9CgpmdW5jdGlvbiB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_VALIDATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"01e1a3c0-038b-4c16-956a-6c9d89328cff\",\"name\":\"Authentication Tree Decision Node Script\",\"description\":\"Default global script for a scripted decision node\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJ0cnVlIjsK\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c234ba0b-58a1-4cfd-9567-09edde980745\",\"name\":\"ForgeRock Internal: OAuth2 Access Token Modification Script\",\"description\":\"Internal token modification script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwovLyBTY3JpcHQgaXMgaW50ZW50aW9uYWxseSBlbXB0eQo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"403cf226-6051-4368-8b72-9ba14f9a5140\",\"name\":\"VKontakte Profile Normalization\",\"description\":\"Normalizes raw profile data from VKontakte\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGhvdG9fNTApLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpKSkK\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bb393d07-a121-47e2-9d24-1a1066f39ec0\",\"name\":\"My Example Script Using Libraries\",\"description\":\"My Example Script Using Libraries\",\"script\":\"LyoqCiAqIFRlc3RpbmcgbGlicmFyeSBzY3JpcHRzCiAqLwp2YXIgbXlsaWIgPSByZXF1aXJlKCdNeSBFeGFtcGxlIExpYnJhcnknKTsKdmFyIGxvZ2dlcnMgPSByZXF1aXJlKCdMaWJyYXJ5IFNjcmlwdCcpOwoKbXlsaWIuYWRkKDEpOwpteWxpYi5sb2dUb3RhbChsb2dnZXIpOwpteWxpYi5hZGQoMyk7Cm15bGliLmxvZ1RvdGFsV2l0aE1lc3NhZ2UobG9nZ2VyLCBteWxpYi5NU0cpOwoKb3V0Y29tZSA9ICd0cnVlJzsK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"a7a78773-445b-4eca-bb93-409e86bced81\",\"name\":\"GitHub Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUubG9naW4pKSkK\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"4e053815-adde-46ac-9fe2-d3ae93517c14\",\"name\":\"My Other Example Library Script\",\"description\":\"null\",\"script\":\"Y29uc29sZS5sb2coImhpIHRoZXJlIik7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"e5c302c8-f838-4698-87cc-d7225fc82454\",\"name\":\"EmailAsUsername\",\"description\":\"null\",\"script\":\"b2JqZWN0QXR0cmlidXRlcyA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpCnVzZXJOYW1lID0gb2JqZWN0QXR0cmlidXRlcy5nZXQoInVzZXJOYW1lIikKCmlmKHVzZXJOYW1lKXsKICAvL0Zvcm0gRmlsbAogIG9iamVjdEF0dHJpYnV0ZXMucHV0KCJtYWlsIiwgdXNlck5hbWUpCn0gZWxzZSB7CiAgLy9Tb2NpYWwKICBvYmplY3RBdHRyaWJ1dGVzLnB1dCgidXNlck5hbWUiLCBvYmplY3RBdHRyaWJ1dGVzLmdldCgibWFpbCIpKQp9CgoKc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgb2JqZWN0QXR0cmlidXRlcyk7Ci8vc2hhcmVkU3RhdGUucHV0KCJ1c2VybmFtZSIsIG1haWwpCgpvdXRjb21lID0gInRydWUiOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"223739f3-9c54-43b7-9572-3c5338786145\",\"name\":\"Format Username\",\"description\":\"null\",\"script\":\"dmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpOwoKc2hhcmVkU3RhdGUucHV0KCJkaXNwbGF5TmFtZSIsIHVzZXJuYW1lKTsKb3V0Y29tZSA9ICJjb250aW51ZSI7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9de3eb62-f131-4fac-a294-7bd170fd4acb\",\"name\":\"Scripted Policy Condition\",\"description\":\"Default global script for Scripted Policy Conditions\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qKgogKiBUaGlzIGlzIGEgUG9saWN5IENvbmRpdGlvbiBleGFtcGxlIHNjcmlwdC4gSXQgZGVtb25zdHJhdGVzIGhvdyB0byBhY2Nlc3MgYSB1c2VyJ3MgaW5mb3JtYXRpb24sCiAqIHVzZSB0aGF0IGluZm9ybWF0aW9uIGluIGV4dGVybmFsIEhUVFAgY2FsbHMgYW5kIG1ha2UgYSBwb2xpY3kgZGVjaXNpb24gYmFzZWQgb24gdGhlIG91dGNvbWUuCiAqLwoKdmFyIHVzZXJBZGRyZXNzLCB1c2VySVAsIHJlc291cmNlSG9zdDsKCmlmICh2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkpIHsKCiAgICB2YXIgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9IGdldENvdW50cnlGcm9tVXNlckFkZHJlc3MoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJDb3VudHJ5IHJldHJpZXZlZCBmcm9tIHVzZXIncyBhZGRyZXNzOiAiICsgY291bnRyeUZyb21Vc2VyQWRkcmVzcyk7CiAgICB2YXIgY291bnRyeUZyb21Vc2VySVAgPSBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpOwogICAgbG9nZ2VyLm1lc3NhZ2UoIkNvdW50cnkgcmV0cmlldmVkIGZyb20gdXNlcidzIElQOiAiICsgY291bnRyeUZyb21Vc2VySVApOwogICAgdmFyIGNvdW50cnlGcm9tUmVzb3VyY2VVUkkgPSBnZXRDb3VudHJ5RnJvbVJlc291cmNlVVJJKCk7CiAgICBsb2dnZXIubWVzc2FnZSgiQ291bnRyeSByZXRyaWV2ZWQgZnJvbSByZXNvdXJjZSBVUkk6ICIgKyBjb3VudHJ5RnJvbVJlc291cmNlVVJJKTsKCiAgICBpZiAoY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21Vc2VySVAgJiYgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21SZXNvdXJjZVVSSSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIFN1Y2NlZWRlZCIpOwogICAgICAgIHJlc3BvbnNlQXR0cmlidXRlcy5wdXQoImNvdW50cnlPZk9yaWdpbiIsIFtjb3VudHJ5RnJvbVVzZXJBZGRyZXNzXSk7CiAgICAgICAgYXV0aG9yaXplZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIEZhaWxlZCIpOwogICAgICAgIGF1dGhvcml6ZWQgPSBmYWxzZTsKICAgIH0KCn0gZWxzZSB7CiAgICBsb2dnZXIubWVzc2FnZSgiUmVxdWlyZWQgcGFyYW1ldGVycyBub3QgZm91bmQuIEF1dGhvcml6YXRpb24gRmFpbGVkLiIpOwogICAgYXV0aG9yaXplZCA9IGZhbHNlOwp9CgovKioKICogVXNlIHRoZSB1c2VyJ3MgYWRkcmVzcyB0byBsb29rdXAgdGhlaXIgY291bnRyeSBvZiByZXNpZGVuY2UuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgdXNlcidzIGNvdW50cnkgb2YgcmVzaWRlbmNlLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21Vc2VyQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlckFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgZ2VvY29kZSA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvY29kZS5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGdlb2NvZGUucmVzdWx0c1tpXTsKICAgICAgICB2YXIgajsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmVzdWx0LmFkZHJlc3NfY29tcG9uZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocmVzdWx0LmFkZHJlc3NfY29tcG9uZW50c1tpXS50eXBlc1swXSA9PSAiY291bnRyeSIpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkcmVzc19jb21wb25lbnRzW2ldLmxvbmdfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFVzZSB0aGUgdXNlcidzIElQIHRvIGxvb2t1cCB0aGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqLwpmdW5jdGlvbiBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgdXNlcklQKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3VudHJ5OwogICAgfQp9CgovKioKICogVXNlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UncyBob3N0IG5hbWUgdG8gbG9va3VwIHRoZSBjb3VudHJ5IHdoZXJlIHRoZSByZXNvdXJjZSBpcyBob3N0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBpbiB3aGljaCB0aGUgcmVzb3VyY2UgaXMgaG9zdGVkLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21SZXNvdXJjZVVSSSgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc291cmNlSG9zdCkpOwogICAgICByZXF1ZXN0LnNldE1ldGhvZCgiR0VUIik7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwoKICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0LmNvdW50cnk7CiAgICB9Cn0KCi8qKgogKiBSZXRyaWV2ZSBhbmQgdmFsaWRhdGUgdGhlIHZhcmlhYmxlcyByZXF1aXJlZCB0byBtYWtlIHRoZSBleHRlcm5hbCBIVFRQIGNhbGxzLgogKgogKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2lsbCBiZSB0cnVlIGlmIHZhbGlkYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkgewogICAgdmFyIHVzZXJBZGRyZXNzU2V0ID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKCJwb3N0YWxBZGRyZXNzIik7CiAgICBpZiAodXNlckFkZHJlc3NTZXQgPT0gbnVsbCB8fCB1c2VyQWRkcmVzc1NldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gYWRkcmVzcyBzcGVjaWZpZWQgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdXNlckFkZHJlc3MgPSB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIGFkZHJlc3M6ICIgKyB1c2VyQWRkcmVzcyk7CgogICAgaWYgKCFlbnZpcm9ubWVudCkgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJObyBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUgZXZhbHVhdGlvbiByZXF1ZXN0LiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2YXIgaXBTZXQgPSBlbnZpcm9ubWVudC5nZXQoIklQIik7CiAgICBpZiAoaXBTZXQgPT0gbnVsbCB8fCBpcFNldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gSVAgc3BlY2lmaWVkIGluIHRoZSBldmFsdWF0aW9uIHJlcXVlc3QgZW52aXJvbm1lbnQgcGFyYW1ldGVycy4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB1c2VySVAgPSBpcFNldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIElQOiAiICsgdXNlcklQKTsKCiAgICBpZiAoIXJlc291cmNlVVJJKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIHJlc291cmNlIFVSSSBzcGVjaWZpZWQuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmVzb3VyY2VIb3N0ID0gcmVzb3VyY2VVUkkubWF0Y2goL14oLio6XC9cLykod3d3XC4pPyhbQS1aYS16MC05XC1cLl0rKSg6WzAtOV0rKT8oLiopJC8pWzNdOwogICAgbG9nZ2VyLm1lc3NhZ2UoIlJlc291cmNlIGhvc3Q6ICIgKyByZXNvdXJjZUhvc3QpOwoKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"POLICY_CONDITION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bae1d54a-e97d-4997-aa5d-c027f21af82c\",\"name\":\"Facebook Profile Normalization\",\"description\":\"Normalizes raw profile data from Facebook\",\"script\":\"Ii8qXG4gKiBDb3B5cmlnaHQgMjAyMCBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBVc2Ugb2YgdGhpcyBjb2RlIHJlcXVpcmVzIGEgY29tbWVyY2lhbCBzb2Z0d2FyZSBsaWNlbnNlIHdpdGggRm9yZ2VSb2NrIEFTLlxuICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdFxuICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuXG4gKi9cblxuaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvblxuaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdFxuXG5yZXR1cm4ganNvbihvYmplY3QoXG4gICAgICAgIGZpZWxkKFwiaWRcIiwgcmF3UHJvZmlsZS5pZCksXG4gICAgICAgIGZpZWxkKFwiZGlzcGxheU5hbWVcIiwgcmF3UHJvZmlsZS5uYW1lKSxcbiAgICAgICAgZmllbGQoXCJnaXZlbk5hbWVcIiwgcmF3UHJvZmlsZS5maXJzdF9uYW1lKSxcbiAgICAgICAgZmllbGQoXCJmYW1pbHlOYW1lXCIsIHJhd1Byb2ZpbGUubGFzdF9uYW1lKSxcbiAgICAgICAgZmllbGQoXCJwaG90b1VybFwiLCByYXdQcm9maWxlLnBpY3R1cmUuZGF0YS51cmwpLFxuICAgICAgICBmaWVsZChcImVtYWlsXCIsIHJhd1Byb2ZpbGUuZW1haWwpLFxuICAgICAgICBmaWVsZChcInVzZXJuYW1lXCIsIHJhd1Byb2ZpbGUuZW1haWwpKSkiCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c827d2b4-3608-4693-868e-bbcf86bd87c7\",\"name\":\"Scripted Module - Client Side\",\"description\":\"Default global script for client side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTYtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qIERlZmF1bHQgQXV0aGVudGljYXRpb24gY2xpZW50IHNpZGUgc2NyaXB0IHRvIHVzZSBhcyBhIHRlbXBsYXRlIGZvciBuZXcgc2NyaXB0cyAqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"name\":\"shared\",\"description\":\"set the same shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdzaGFyZWRWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzaGFyZWQgYWNyb3NzIGFsbCBuZXN0ZWQgam91cm5leXMuIEl0IGNvbnRhaW5zIGFuIGluZGljYXRvciBpbiB3aGljaCBsZXZlbCBpdCB3YXMgbGFzdCBzZXQuJyk7Cn0oKSk7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"5e854779-6ec1-4c39-aeba-0477e0986646\",\"name\":\"Config Provider Node Script\",\"description\":\"Script to provide values for a config provider node\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKioKICogVGhlIGZvbGxvd2luZyBzY3JpcHQgaXMgYSBzaW1wbGlmaWVkIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0byBidWlsZAogKiB1cCBhIGNvbmZpZyBNYXAgb2JqZWN0IHdpdGggY3VzdG9tIHZhbHVlcy4gVGhlIENvbmZpZyBQcm92aWRlciBOb2RlIHdpbGwgdGhlbgogKiBwcm92aWRlIHRoaXMgY29uZmlnIE1hcCB0byB0aGUgZGVzaXJlZCBub2RlIHR5cGUuIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBNYXAKICogeW91IGJ1aWxkIGhlcmUgaXMgbmFtZWQgJ2NvbmZpZycuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKgogKiBub2RlU3RhdGUgLSBOb2RlIFN0YXRlICgxKQogKiAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoaXMgcmVwcmVzZW50cyB0aGUgY3VycmVudCB2YWx1ZXMgc3RvcmVkIGluIHRoZSBub2RlIHN0YXRlLgogKgogKiBpZFJlcG9zaXRvcnkgLSBQcm9maWxlIERhdGEgKDIpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYSByZXBvc2l0b3J5IHRvIHJldHJpZXZlIHVzZXIgaW5mb3JtYXRpb24uCiAqCiAqIHNlY3JldHMgLSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAoMykKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBTZWNyZXRzIEFQSSBmcm9tIGEgc2NyaXB0aW5nIGNvbnRleHQuCiAqCiAqIHJlcXVlc3RIZWFkZXJzICg0KSAtIE1hcCAoNSkKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2Nlc3NpbmcgaGVhZGVycyBpbiB0aGUgbG9naW4gcmVxdWVzdC4KICoKICogbG9nZ2VyIC0gRGVidWcgTG9nZ2luZyAoNikKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2UuCiAqCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoNykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cy4KICoKICogcmVhbG0gLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqCiAqIGV4aXN0aW5nU2Vzc2lvbiAtIE1hcDxTdHJpbmcsIFN0cmluZz4gKDUpCiAqICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LiBUaGUgcmV0dXJuZWQgbWFwIGZyb20KICogICAgICAgICAgU1NPVG9rZW4uZ2V0UHJvcGVydGllcygpICg4KQogKgogKiByZXF1ZXN0UGFyYW1ldGVycyAtIE1hcCAoNSkKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBwYXJhbWV0ZXJzLgogKgogKgogKiBPdXRwdXRzOgogKgogKiBjb25maWcgLSBNYXAgKDUpCiAqICAgICAgICAgICBEZWZpbmUgYW5kIGZpbGwgYSBNYXAgb2JqZWN0IG5hbWVkICdjb25maWcnIHdpdGggY3VzdG9tIHZhbHVlcywgdGhpcyB3aWxsIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlCiAqICAgICAgICAgICBhc3NvY2lhdGVkIG5vZGUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ1Byb3ZpZGVyTm9kZS4KICoKICogUmVmZXJlbmNlOgogKiAoMSkgTm9kZSBTdGF0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9pZGNsb3VkLWFtL2xhdGVzdC9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtbm9kZVN0YXRlCiAqICgyKSBQcm9maWxlIERhdGEgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4xL2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1pZC1yZXBvCiAqICgzKSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjEvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1hdXRobi1zZWNyZXRzCiAqICg0KSBSZXF1ZXN0IEhlYWRlcnMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtcmVxdWVzdEhlYWRlcnMuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL01hcC5odG1sCiAqICg2KSBEZWJ1ZyBMb2dnaW5nIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogKDcpIEhUVFAgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg4KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqLwoKY29uZmlnID0gewogICAgImtleTAiOiB7InN1YktleSI6ICJ2YWx1ZTAifSwKICAgICJrZXkxIjogInZhbHVlMSIKfTsK\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"CONFIG_PROVIDER_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6c49bebe-3a62-11ed-a261-0242ac120002\",\"name\":\"Library Script\",\"description\":\"Default global library script to be referenced from other scripts\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjItMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIGlzIGFuIGV4YW1wbGUgbGlicmFyeSBzY3JpcHQgd2l0aCBtZXRob2RzIHRoYXQgY2FuIGJlIHVzZWQgaW4gb3RoZXIgc2NyaXB0cy4KICogVG8gcmVmZXJlbmNlIGl0LCB1c2UgdGhlIGZvbGxvd2luZzoKICoKICogdmFyIGxpYnJhcnkgPSByZXF1aXJlKCJMaWJyYXJ5IFNjcmlwdCIpOwogKgogKiBsaWJyYXJ5LmxvZ0Vycm9yKGxvZ2dlciwgIkVycm9yIG1lc3NhZ2UiKTsKICogbGlicmFyeS5sb2dEZWJ1Zyhsb2dnZXIsICJEZWJ1ZyBtZXNzYWdlIik7CiAqLwoKZnVuY3Rpb24gbG9nRXJyb3IobG9nLCBlcnJvck1lc3NhZ2UpIHsKICBsb2cuZXJyb3IoZXJyb3JNZXNzYWdlKTsKfQoKZnVuY3Rpb24gbG9nV2FybmluZyhsb2csIHdhcm5pbmdNZXNzYWdlKSB7CiAgbG9nLndhcm4od2FybmluZ01lc3NhZ2UpOwp9CgpleHBvcnRzLmxvZ0Vycm9yID0gbG9nRXJyb3I7CmV4cG9ydHMubG9nV2FybmluZyA9IGxvZ1dhcm5pbmc7CgovLyBBbHRlcm5hdGl2ZWx5LCBleHBvcnRzIGNhbiBiZSBkZWNsYXJlZCB1c2luZyBhbiBpbmxpbmUgYXJyb3cgZnVuY3Rpb24KCmV4cG9ydHMubG9nSW5mbyA9IChsb2csIGluZm9NZXNzYWdlKSA9PiBsb2cuaW5mbyhpbmZvTWVzc2FnZSk7CmV4cG9ydHMubG9nRGVidWcgPSAobG9nLCBkZWJ1Z01lc3NhZ2UpID0+IGxvZy5kZWJ1ZyhkZWJ1Z01lc3NhZ2UpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"3f93ef6e-e54a-4393-aba1-f322656db28a\",\"name\":\"OAuth2 Authorize Endpoint Data Provider Script\",\"description\":\"Default global script for OAuth2 Authorize Endpoint Data Provider\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcmV0dXJuIGFkZGl0aW9uYWwgZGF0YSB3aGVuIGF1dGhvcml6ZSByZXF1ZXN0IGlzIGNhbGxlZC4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LgogKgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cwogKgogKiBsb2dnZXIgLSBEZWJ1ZyAoMykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSAiU2NyaXB0ZWRBdXRob3JpemVFbmRwb2ludERhdGFQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FVVEhPUklaRV9FTkRQT0lOVF9EQVRBX1BST1ZJREVSLgogKgogKiBzY3JpcHROYW1lIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHNjcmlwdAogKgogKiBSZXR1cm4gLSBhIE1hcDxTdHJpbmcsIFN0cmluZz4gb2YgYWRkaXRpb25hbCBkYXRhICg0KS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgzKSBEZWJ1ZyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBhdXRob3JpemUgZW5kcG9pbnQgZGF0YSBwcm92aWRlciBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCi8qIEVYQU1QTEUKdmFyIG1hcCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGEoKSB7CgogICAgLy9JZiBjb25zdGFudCBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkCiAgICBtYXAucHV0KCJoZWxsbyIsICJ3b3JsZCIpOwoKICAgIC8vSWYgc29tZSBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkIGZyb20gdGhpcmQgcGFydHkgc2VydmljZQogICAgYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCk7CgogICAgLy9JZiB0aGVyZSBpcyBhIG5lZWQgdG8gcmV0dXJuIHNvbWUgdXNlciBzZXNzaW9uIGRhdGEKICAgIGFkZEFkZGl0aW9uYWxEYXRhRnJvbVNlc3Npb25Qcm9wZXJ0aWVzKCkKCiAgICByZXR1cm4gbWFwOwp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCkgewogIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLlNlcnZlckV4Y2VwdGlvbgogICAgKTsKICB0cnkgewogICAgICAgIC8vT2J0YWluIGFkZGl0aW9uYWwgZGF0YSBieSBwZXJmb3JtaW5nIGEgUkVTVCBjYWxsIHRvIGFuIGV4dGVybmFsIHNlcnZpY2UKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgICAgIHJlcXVlc3Quc2V0VXJpKCJodHRwczovL3RoaXJkLnBhcnR5LmFwcC9oZWxsby5qc3AiKTsKICAgICAgICByZXF1ZXN0LnNldE1ldGhvZCgiUE9TVCIpOwogICAgICAgIC8vcmVxdWVzdC5zZXRFbnRpdHkoImZvbz1iYXImaGVsbG89d29ybGQiKTsKICAgICAgICByZXF1ZXN0LnNldEVudGl0eShqc29uKG9iamVjdCgKICAgICAgICAgICAgICAgICAgICBmaWVsZCgiZm9vIiwgImJhciIpKSkpOwogICAgICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXRPclRocm93KCk7CiAgICAgICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwogICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICBtYXAucHV0KCJzb21lS2V5IixyZXN1bHQuZ2V0KCJzb21lS2V5IikpOwogIH0gY2F0Y2ggKGVycikgewogICAgIHRocm93IG5ldyBmckphdmEuU2VydmVyRXhjZXB0aW9uKGVycik7CiAgfQp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tU2Vzc2lvblByb3BlcnRpZXMoKSB7CiAgLy9BZGQgYWRkaXRpb25hbCBkYXRhIGZyb20gc2Vzc2lvbiBwcm9wZXJ0eSB2YWx1ZXMKICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeyAvLyBzZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIHJlc291cmNlIG93bmVyIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGdyYW50CiAgICAgbWFwLnB1dCgiaXBBZGRyZXNzIiwgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgiSG9zdCIpKQogICB9Cn07CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKSk7Cn07CgphZGRBZGRpdGlvbmFsRGF0YSgpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"name\":\"Check Username\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"name\":\"Okta Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJPa3RhIHJhd1Byb2ZpbGU6ICIrcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5wcmVmZXJyZWRfdXNlcm5hbWUpKSkK\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1f389a3d-21cf-417c-a6d3-42ea620071f0\",\"name\":\"ForgeRock Internal: OIDC Claims Script\",\"description\":\"Internal OIDC Claims script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"name\":\"Remove Button\",\"description\":\"Remove button from page.\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"4c963bb3-7084-43d0-bcdc-a47482cf1825\",\"name\":\"Dummy\",\"description\":\"Dummy\",\"script\":\"Cm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"name\":\"GitHub Profile Normalization (VS)\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJHaXRIdWIgcmF3UHJvZmlsZTogIityYXdQcm9maWxlKQoKcmV0dXJuIGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZmlyc3RfbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3RfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5waWN0dXJlLmRhdGEudXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLmVtYWlsKSkpCg==\",\"default\":false,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"name\":\"Alpha OAuth2 Access Token Modification Script\",\"description\":\"Default alpha realm script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"name\":\"level\",\"description\":\"set per level shared state variable\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdsZXZlbCcgKyBsZXZlbCArICdWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzZXQgYXQgZWFjaCBsZXZlbCBvZiB0aGUgbmVzdGVkIGpvdXJuZXlzLiBJdCBjb250YWlucyBhbiBpbmRpY2F0b3IgaW4gd2hpY2ggbGV2ZWwgaXQgd2FzIHNldC4nKTsKfSgpKTsK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"name\":\"debug\",\"description\":\"Display sharedState, transientState, and headers.\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogRGlzcGxheSBzaGFyZWRTdGF0ZSwgdHJhbnNpZW50U3RhdGUsIGFuZCBoZWFkZXJzLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwp2YXIgYW5jaG9yID0gImFuY2hvci0iLmNvbmNhdChnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4JykpOwp2YXIgaGFsaWduID0gImxlZnQiOwp2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBIZWFkZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIn0pIikKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCmlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGFuY2hvcgogICAgICAgICksCiAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0KCiAvKgogICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAqIAogICogRXhhbXBsZToKICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICovCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgIHZhciB2ID0gcjsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKfQo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"312e951f-70c5-49d2-a9ae-93aef909d5df\",\"name\":\"Salesforce Profile Normalization\",\"description\":\"Normalizes raw profile data from Salesforce\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZ2l2ZW5fbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmZhbWlseV9uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJsb2NhbGUiLCByYXdQcm9maWxlLnpvbmVJbmZvKSkpCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"07ee6240-d106-4e25-a781-5fcabc477d22\",\"name\":\"FrodoSPAdapter\",\"description\":\"null\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0K\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1244e639-4a31-401d-ab61-d75133d8dc9e\",\"name\":\"Instagram Profile Normalization\",\"description\":\"Normalizes raw profile data from Instagram\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkpCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"da7a96a8-7969-4dab-9c6e-a812938cc76d\",\"name\":\"test-script-with-secrets-and-variables\",\"description\":\"Script that uses secrets and variables\",\"script\":\"Y29uc29sZS5sb2coYHBpOiAke3N5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3QudmFyLnBpIil9YCk7CmNvbnNvbGUubG9nKGBwaSBzZWNyZXQ6ICR7c3lzdGVtRW52LmdldFByb3BlcnR5KCJlc3YudGVzdC5zZWNyZXQucGkiKX1gKTsKY29uc29sZS5sb2coYHNwZWVkIG9mIGxpZ2h0OiAke3N5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3QudmFyaWFibGUubGlnaHQiKX1gKTsKY29uc29sZS5sb2coYGV1bGVyJ3MgbnVtYmVyOiAke3N5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3Quc2VjcmV0LmV1bGVyIil9YCk7CmNvbnNvbGUubG9nKGBBcmVhIG9mIGNpcmNsZSB3aXRoIHJhZGl1cyA3OiAkezcgKiA3ICogc3lzdGVtRW52LmdldFByb3BlcnR5KCJlc3YudGVzdC52YXIucGkiKX1gKTsKY29uc29sZS5sb2coYFZvbHVtZSBvZiBzcGhlcmUgd2l0aCByYWRpdXMgNzogJHs0ICogNyAqIDcgKiA3ICogc3lzdGVtRW52LmdldFByb3BlcnR5KCJlc3YudGVzdC5zZWNyZXQucGkiKSAvIDN9YCk7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"c4f22465-2368-4e27-8013-e6399974fd48\",\"name\":\"SAML2 IDP Attribute Mapper Script\",\"description\":\"Default global script for SAML2 IDP Attribute Mapper\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSBvYmplY3RzIGZvciB0aGUgSURQIGZyYW1ld29yayB0byBpbnNlcnQgaW50byB0aGUgZ2VuZXJhdGVkIEFzc2VydGlvbi4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgICAgICBUaGUgaG9zdGVkIGVudGl0eSBJRC4KICogcmVtb3RlRW50aXR5SWQgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgICAgVGhlIHJlbW90ZSBlbnRpdHkgSUQuCiAqIHJlYWxtIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGluZyB0by4KICogbG9nZ2VyIC0gQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5TQU1MMl9JRFBfQVRUUklCVVRFX01BUFBFUgogKiBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgLSBJZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgKDIpCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFuIElkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlciBpbnN0YW5jZSBjb250YWluaW5nIG1ldGhvZHMgdXNlZCBmb3IgSURQIGF0dHJpYnV0ZSBtYXBwaW5nLgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb246CiAqICAgICAgLSBvbiBmYWlsaW5nIHRvIG1hcCB0aGUgSURQIGF0dHJpYnV0ZXMuCiAqCiAqIFJldHVybiAtIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSAoMykgb2JqZWN0cy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgSWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaHRtbC4KICogKDMpIEF0dHJpYnV0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9hc3NlcnRpb24vQXR0cmlidXRlLmh0bWwuCiAqLwoKLyoqCiAqIERlZmF1bHQgU0FNTDIgSURQIEF0dHJpYnV0ZSBNYXBwZXIuCiAqLwpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKCkgewogICAgdmFyIGZySmF2YSA9IEphdmFJbXBvcnRlcigKICAgICAgICBjb20uc3VuLmlkZW50aXR5LnNhbWwyLmNvbW1vbi5TQU1MMkV4Y2VwdGlvbgogICAgKTsKCiAgICBjb25zdCBkZWJ1Z01ldGhvZCA9ICJTY3JpcHRlZElEUEF0dHJpYnV0ZU1hcHBlci5nZXRBdHRyaWJ1dGVzOjogIjsKCiAgICB0cnkgewoKICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1Nlc3Npb25WYWxpZChzZXNzaW9uKSkgewogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZGVidWdNZXRob2QgKyAiSW52YWxpZCBzZXNzaW9uLiIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHZhciBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0UmVtb3RlU1BDb25maWdBdHRyaWJ1dGVNYXAocmVhbG0sIHJlbW90ZUVudGl0eUlkKTsKICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJSZW1vdGUgU1AgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICBpZiAoY29uZmlnTWFwID09IG51bGwgfHwgY29uZmlnTWFwLmlzRW1wdHkoKSkgewogICAgICAgICAgICBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0SG9zdGVkSURQQ29uZmlnQXR0cmlidXRlTWFwKHJlYWxtLCBob3N0ZWRFbnRpdHlJZCk7CiAgICAgICAgICAgIGlmIChjb25maWdNYXAgPT0gbnVsbCB8fCBjb25maWdNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJDb25maWd1cmF0aW9uIG1hcCBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIkhvc3RlZCBJRFAgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICB9CgogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKICAgICAgICB2YXIgc3RyaW5nVmFsdWVNYXAgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKICAgICAgICB2YXIgYmluYXJ5VmFsdWVNYXA7CiAgICAgICAgdmFyIGxvY2FsQXR0cmlidXRlOwoKICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVhZCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBkYXRhc3RvcmUgaWYgdGhlIGlnbm9yZWQgcHJvZmlsZSBpcyBlbmFibGVkIGluIHRoaXMgcmVhbG0uCiAgICAgICAgaWYgKCFpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaXNJZ25vcmVkUHJvZmlsZShzZXNzaW9uLCByZWFsbSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIFJlc29sdmUgYXR0cmlidXRlcyB0byBiZSByZWFkIGZyb20gdGhlIGRhdGFzdG9yZS4KICAgICAgICAgICAgICAgIHZhciBzdHJpbmdBdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7CiAgICAgICAgICAgICAgICB2YXIgYmluYXJ5QXR0cmlidXRlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgIHdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlJdGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZSA9IGNvbmZpZ01hcC5nZXQoa2V5KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1N0YXRpY0F0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc0JpbmFyeUF0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHRyZWF0IGFzIGJlaW5nIGJpbmFyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5QXR0cmlidXRlcy5hZGQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLnJlbW92ZUJpbmFyeUF0dHJpYnV0ZUZsYWcobG9jYWxBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMuYWRkKGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXN0cmluZ0F0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0QXR0cmlidXRlcyhzZXNzaW9uLCBzdHJpbmdBdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghYmluYXJ5QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBiaW5hcnlWYWx1ZU1hcCA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5nZXRCaW5hcnlBdHRyaWJ1dGVzKHNlc3Npb24sIGJpbmFyeUF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGRlYnVnTWV0aG9kICsgIkVycm9yIGFjY2Vzc2luZyB0aGUgZGF0YXN0b3JlLiAiICsgZXJyb3IpOwogICAgICAgICAgICAgICAgLy9jb250aW51ZSB0byBjaGVjayBpbiBzc290b2tlbi4KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICB3aGlsZSAoa2V5SXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGtleSA9IGtleUl0ZXIubmV4dCgpCiAgICAgICAgICAgIHZhciBuYW1lRm9ybWF0ID0gbnVsbDsKICAgICAgICAgICAgdmFyIHNhbWxBdHRyaWJ1dGUgPSBrZXk7CiAgICAgICAgICAgIGxvY2FsQXR0cmlidXRlID0gY29uZmlnTWFwLmdldChrZXkpOwogICAgICAgICAgICAvLyBjaGVjayBpZiBzYW1sQXR0cmlidXRlIGhhcyBmb3JtYXQgbmFtZUZvcm1hdHxzYW1sQXR0cmlidXRlCiAgICAgICAgICAgIHZhciBzYW1sQXR0cmlidXRlcyA9IFN0cmluZyhuZXcgamF2YS5sYW5nLlN0cmluZyhzYW1sQXR0cmlidXRlKSk7CiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBzYW1sQXR0cmlidXRlcy5zcGxpdCgnfCcpOwoKICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICBuYW1lRm9ybWF0ID0gdG9rZW5zWzBdOwogICAgICAgICAgICAgICAgc2FtbEF0dHJpYnV0ZSA9IHRva2Vuc1sxXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVZhbHVlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzU3RhdGljQXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgZmxhZyBiZWZvcmUgdXNpbmcgaXQgYXMgdGhlIHN0YXRpYyB2YWx1ZQogICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlU3RhdGljQXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoW2xvY2FsQXR0cmlidXRlXSk7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJBZGRpbmcgc3RhdGljIHZhbHVlIHt9IGZvciBhdHRyaWJ1dGUgbmFtZWQge30iLCBsb2NhbEF0dHJpYnV0ZSwgc2FtbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzQmluYXJ5QXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZmxhZyBhcyBub3QgdXNlZCBmb3IgbG9va3VwCiAgICAgICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlQmluYXJ5QXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzID0gaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldEJpbmFyeUF0dHJpYnV0ZVZhbHVlcyhzYW1sQXR0cmlidXRlLCBsb2NhbEF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5VmFsdWVNYXApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWVNYXAgIT0gbnVsbCAmJiAhc3RyaW5nVmFsdWVNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcyA9IHN0cmluZ1ZhbHVlTWFwLmdldChsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoZGVidWdNZXRob2QgKyAie30gc3RyaW5nIHZhbHVlIG1hcCB3YXMgZW1wdHkgb3IgbnVsbC4iLCBsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSB1c2VycyBzc29Ub2tlbgogICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlcyA9PSBudWxsIHx8IGF0dHJpYnV0ZVZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJVc2VyIHByb2ZpbGUgZG9lcyBub3QgaGF2ZSB2YWx1ZSBmb3Ige30sIGNoZWNraW5nIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldFByb3BlcnR5U2V0KHNlc3Npb24sIGxvY2FsQXR0cmlidXRlKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZXMgPT0gbnVsbCB8fCBhdHRyaWJ1dGVWYWx1ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJ7fSBub3QgZm91bmQgaW4gdXNlciBwcm9maWxlIG9yIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuYWRkKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5jcmVhdGVTQU1MQXR0cmlidXRlKHNhbWxBdHRyaWJ1dGUsIG5hbWVGb3JtYXQsIGF0dHJpYnV0ZVZhbHVlcykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKCiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGxvZ2dlci5lcnJvcihkZWJ1Z01ldGhvZCArICJFcnJvciBtYXBwaW5nIElEUCBhdHRyaWJ1dGVzLiAiICsgZXJyb3IpOwogICAgICAgIHRocm93IG5ldyBmckphdmEuU0FNTDJFeGNlcHRpb24oZXJyb3IpOwogICAgfQp9CgpnZXRBdHRyaWJ1dGVzKCk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ATTRIBUTE_MAPPER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"name\":\"Google Profile Normalization\",\"description\":\"Normalizes raw profile data from Google\",\"script\":\"IlwiLypcXG4gKiBDb3B5cmlnaHQgMjAyMCBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcXG4gKlxcbiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuXFxuICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdFxcbiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLlxcbiAqL1xcblxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5maWVsZFxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uXFxuaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdFxcblxcbnJldHVybiBqc29uKG9iamVjdChcXG4gICAgICAgIGZpZWxkKFxcXCJpZFxcXCIsIHJhd1Byb2ZpbGUuc3ViKSxcXG4gICAgICAgIGZpZWxkKFxcXCJkaXNwbGF5TmFtZVxcXCIsIHJhd1Byb2ZpbGUubmFtZSksXFxuICAgICAgICBmaWVsZChcXFwiZ2l2ZW5OYW1lXFxcIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJmYW1pbHlOYW1lXFxcIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksXFxuICAgICAgICBmaWVsZChcXFwicGhvdG9VcmxcXFwiLCByYXdQcm9maWxlLnBpY3R1cmUpLFxcbiAgICAgICAgZmllbGQoXFxcImVtYWlsXFxcIiwgcmF3UHJvZmlsZS5lbWFpbCksXFxuICAgICAgICBmaWVsZChcXFwidXNlcm5hbWVcXFwiLCByYXdQcm9maWxlLmVtYWlsKSxcXG4gICAgICAgIGZpZWxkKFxcXCJsb2NhbGVcXFwiLCByYXdQcm9maWxlLmxvY2FsZSkpKVwiXG4i\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"4a171d3a-056b-4ab7-a19f-d7e93ddf7ae5\",\"name\":\"SAML2 NameID Mapper Script\",\"description\":\"Default global script for SAML2 NameID Mapper\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjQgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBpcyBhbiBleGFtcGxlIFNBTUwyIE5hbWVJRCBNYXBwZXIgc2NyaXB0LgogKiBUaGlzIHNjcmlwdCBzaG91bGQgcmV0dXJuIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgU0FNTDIgTmFtZUlEIGlkZW50aWZpZXIuCiAqIFRoZSBleGFtcGxlIHNjcmlwdCBkZWxlZ2F0ZXMgdG8gdGhlIGNvbmZpZ3VyZWQgamF2YSBwbHVnaW4gdmlhIHRoZSBuYW1lSURTY3JpcHRIZWxwZXIgYmluZGluZy4KICovCm5hbWVJRFNjcmlwdEhlbHBlci5nZXROYW1lSURWYWx1ZSgpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_NAMEID_MAPPER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"13e3f263-9cd3-4844-8d1c-040fd0dd02eb\",\"name\":\"Device Profile Match Template - Decision Node Script\",\"description\":\"Default global script template for Device Profile Match decision node script for Authentication Tree\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGEgc2ltcGxpZmllZCB0ZW1wbGF0ZSBmb3IgdW5kZXJzdGFuZGluZwogKiB0aGUgYmFzaWNzIG9mIGRldmljZSBtYXRjaGluZy4gX1RoaXMgaXMgbm90IGZ1bmN0aW9uYWxseSBjb21wbGV0ZS5fCiAqIEZvciBhIGZ1bmN0aW9uYWxseSBjb21wbGV0ZSBzY3JpcHQgYXMgd2VsbCBhcyBhIGRldmVsb3BtZW50IHRvb2xraXQsCiAqIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JnZVJvY2svZm9yZ2Vyb2NrLWRldmljZS1tYXRjaC1zY3JpcHQuCiAqCiAqIEdsb2JhbCBub2RlIHZhcmlhYmxlcyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHNjb3BlOgogKiAxLiBgc2hhcmVkU3RhdGVgIHByb3ZpZGVzIGFjY2VzcyB0byBpbmNvbWluZyByZXF1ZXN0CiAqIDIuIGBkZXZpY2VQcm9maWxlc0Rhb2AgcHJvdmlkZXMgYWNjZXNzIHRvIHN0b3JlZCBwcm9maWxlcwogKiAzLiBgb3V0Y29tZWAgdmFyaWFibGUgbWFwcyB0byBhdXRoIHRyZWUgbm9kZSBvdXRjb21lczsgdmFsdWVzIGFyZQogKiAgICAndHJ1ZScsICdmYWxzZScsIG9yICd1bmtub3duRGV2aWNlJyAobm90aWNlIF9hbGxfIGFyZSBzdHJpbmdzKS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgcmVxdWVzdCdzIGRldmljZSBwcm9maWxlLgogKiBSZXR1cm5zIHNlcmlhbGl6ZWQgSlNPTiAodHlwZSBzdHJpbmcpOyBwYXJzaW5nIHRoaXMgd2lsbCByZXN1bHQgYQogKiBuYXRpdmUgSlMgb2JqZWN0LgogKi8KdmFyIGluY29taW5nSnNvbiA9IHNoYXJlZFN0YXRlLmdldCgnZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlJykudG9TdHJpbmcoKTsKdmFyIGluY29taW5nID0gSlNPTi5wYXJzZShpbmNvbWluZ0pzb24pOwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgdXNlcidzIHVzZXJuYW1lIGFuZCByZWFsbS4KICogTm90aWNlIHRoZSB1c2Ugb2YgYC5hc1N0cmluZygpYC4KICovCnZhciB1c2VybmFtZSA9IHNoYXJlZFN0YXRlLmdldCgidXNlcm5hbWUiKS5hc1N0cmluZygpOwp2YXIgcmVhbG0gPSBzaGFyZWRTdGF0ZS5nZXQoInJlYWxtIikuYXNTdHJpbmcoKTsKCi8qKgogKiBHZXQgdGhlIHVzZXIncyBzdG9yZWQgcHJvZmlsZXMgZm9yIGFwcHJvcHJpYXRlIHJlYWxtLgogKiBSZXR1cm5zIGEgX3NwZWNpYWxfIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIHByb2ZpbGUgZGF0YQogKi8KdmFyIHN0b3JlZFByb2ZpbGVzID0gZGV2aWNlUHJvZmlsZXNEYW8uZ2V0RGV2aWNlUHJvZmlsZXModXNlcm5hbWUsIHJlYWxtKTsKCi8vIERlZmF1bHQgdG8gYG91dGNvbWVgIG9mICd1bmtub3duRGV2aWNlJwpvdXRjb21lID0gJ3Vua25vd25EZXZpY2UnOwoKaWYgKHN0b3JlZFByb2ZpbGVzKSB7CiAgICB2YXIgaSA9IDA7CiAgICAvLyBOT1RFOiBgLnNpemUoKWAgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBzdG9yZWQgcHJvZmlsZXMKICAgIHZhciBsZW4gPSBzdG9yZWRQcm9maWxlcy5zaXplKCk7CgogICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHN0b3JlZCBwcm9maWxlLgogICAgICAgICAqIFJldHVybnMgc2VyaWFsaXplZCBKU09OICh0eXBlIHN0cmluZyk7IHBhcnNpbmcgdGhpcyB3aWxsIHJlc3VsdAogICAgICAgICAqIGEgbmF0aXZlIEpTIG9iamVjdC4KICAgICAgICAgKi8KICAgICAgICB2YXIgc3RvcmVkSnNvbiA9IHN0b3JlZFByb2ZpbGVzLmdldChpKTsKICAgICAgICB2YXIgc3RvcmVkID0gSlNPTi5wYXJzZShzdG9yZWRKc29uKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmluZCBhIHN0b3JlZCBwcm9maWxlIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KICAgICAgICAgKi8KICAgICAgICBpZiAoaW5jb21pbmcuaWRlbnRpZmllciA9PT0gc3RvcmVkLmlkZW50aWZpZXIpIHsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBOb3cgdGhhdCB5b3UndmUgZm91bmQgdGhlIGFwcHJvcHJpYXRlIHByb2ZpbGUsIHlvdSB3aWxsIHBlcmZvcm0KICAgICAgICAgICAgICogdGhlIGxvZ2ljIGhlcmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyBvZiB0aGUgYGluY29taW5nYCBwcm9maWxlCiAgICAgICAgICAgICAqIHdpdGggdGhhdCBvZiB0aGUgYHN0b3JlZGAgcHJvZmlsZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogVGhlIHJlc3VsdCBvZiB0aGUgbWF0Y2hpbmcgbG9naWMgaXMgYXNzaWduZWQgdG8gYG91dGNvbWVgLiBTaW5jZQogICAgICAgICAgICAgKiB3ZSBoYXZlIHByb2ZpbGVzIG9mIHRoZSBzYW1lIGlkZW50aWZpZXIsIHRoZSB2YWx1ZSAodHlwZSBzdHJpbmcpCiAgICAgICAgICAgICAqIHNob3VsZCBub3cgYmUgZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnIChwcm9wZXJ0aWVzIG1hdGNoZWQgb3Igbm90KS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYywgdmlzaXQgdGhpcyBHaXRodWIgcmVwbzoKICAgICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL0ZvcmdlUm9jay9mb3JnZXJvY2stZGV2aWNlLW1hdGNoLXNjcmlwdAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb3V0Y29tZSA9ICdmYWxzZSc7CiAgICAgICAgfQogICAgfQp9Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"d22f9a0c-426a-4466-b95e-d0f125b0d5fa\",\"name\":\"OAuth2 Access Token Modification Script\",\"description\":\"Default global script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c735de08-f8f2-4e69-aa4a-2d8d3d438323\",\"name\":\"OAuth2 May Act Script\",\"description\":\"Default global script for OAuth2 May Act\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKiB0b2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gdG8gYmUgdXBkYXRlZC4gTXV0YWJsZSBvYmplY3QsIGFsbCBjaGFuZ2VzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gd2lsbCBiZSByZWZsZWN0ZWQuCiAqIGxvZ2dlciAtIGFsd2F5cyBwcmVzZW50LCBjb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIHNjcmlwdE5hbWUgLSBhbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0CiAqIHNlc3Npb24gLSBwcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdAogKiByZXF1ZXN0UHJvcGVydGllcyAtIGFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIHRoZSByZXF1ZXN0IFVSSQogKiAgICAgICAgICAgICAgICAgICAgIHJlYWxtIC0gdGhlIHJlYWxtIHRoYXQgdGhlIHJlcXVlc3QgcmVsYXRlcyB0bwogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBhIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLiBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IKICogICAgICAgICAgICAgICAgICAgICBtb3JlIHByb3BlcnRpZXMuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QKICogICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMuCiAqIGNsaWVudFByb3BlcnRpZXMgLSBwcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICBjbGllbnRJZCAtIHRoZSBjbGllbnQncyBVcmkgZm9yIHRoZSByZXF1ZXN0IGxvY2FsZQogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBsaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gbGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudAogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFNjb3BlcyAtIGxpc3Qgb2YgdGhlIGFsbG93ZWQgc2NvcGVzIGZvciB0aGUgY2xpZW50CiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzLCBlLmc6CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyB0ZXN0bWFwIC0+IEtleTEgLT4gVmFsdWUxCiAqCiAqIGlkZW50aXR5IC0gYWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIKICogc2NvcGVzIC0gYWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzCiAqLwovKgppbXBvcnQgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQoKdG9rZW4uc2V0TWF5QWN0KAogICAgSnNvblZhbHVlLmpzb24oSnNvblZhbHVlLm9iamVjdCgKICAgICAgICBKc29uVmFsdWUuZmllbGQoImNsaWVudF9pZCIsICJteUNsaWVudCIpLCAKICAgICAgICBKc29uVmFsdWUuZmllbGQoInN1YiIsICIodXNyIW15QWN0b3IpIikpKSkKKi8K\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"OAUTH2_MAY_ACT\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58c824ae-84ed-4724-82cd-db128fc3f6c\",\"name\":\"Normalized Profile to Managed User\",\"description\":\"Converts a normalized social profile into a managed user\",\"script\":\"IlwiLypcXG4gKiBDb3B5cmlnaHQgMjAyMCBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcXG4gKlxcbiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuXFxuICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdFxcbiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLlxcbiAqL1xcblxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5maWVsZFxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uXFxuaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdFxcblxcbmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlXFxuXFxuSnNvblZhbHVlIG1hbmFnZWRVc2VyID0ganNvbihvYmplY3QoXFxuICAgICAgICBmaWVsZChcXFwiZ2l2ZW5OYW1lXFxcIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJzblxcXCIsIG5vcm1hbGl6ZWRQcm9maWxlLmZhbWlseU5hbWUpLFxcbiAgICAgICAgZmllbGQoXFxcIm1haWxcXFwiLCBub3JtYWxpemVkUHJvZmlsZS5lbWFpbCksXFxuICAgICAgICBmaWVsZChcXFwidXNlck5hbWVcXFwiLCBub3JtYWxpemVkUHJvZmlsZS51c2VybmFtZSkpKVxcblxcbmlmIChub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxBZGRyZXNzLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoXFxcInBvc3RhbEFkZHJlc3NcXFwiLCBub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxBZGRyZXNzKVxcbmlmIChub3JtYWxpemVkUHJvZmlsZS5hZGRyZXNzTG9jYWxpdHkuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dChcXFwiY2l0eVxcXCIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NMb2NhbGl0eSlcXG5pZiAobm9ybWFsaXplZFByb2ZpbGUuYWRkcmVzc1JlZ2lvbi5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KFxcXCJzdGF0ZVByb3ZpbmNlXFxcIiwgbm9ybWFsaXplZFByb2ZpbGUuYWRkcmVzc1JlZ2lvbilcXG5pZiAobm9ybWFsaXplZFByb2ZpbGUucG9zdGFsQ29kZS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KFxcXCJwb3N0YWxDb2RlXFxcIiwgbm9ybWFsaXplZFByb2ZpbGUucG9zdGFsQ29kZSlcXG5pZiAobm9ybWFsaXplZFByb2ZpbGUuY291bnRyeS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KFxcXCJjb3VudHJ5XFxcIiwgbm9ybWFsaXplZFByb2ZpbGUuY291bnRyeSlcXG5pZiAobm9ybWFsaXplZFByb2ZpbGUucGhvbmUuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dChcXFwidGVsZXBob25lTnVtYmVyXFxcIiwgbm9ybWFsaXplZFByb2ZpbGUucGhvbmUpXFxuXFxuLy8gaWYgdGhlIGdpdmVuTmFtZSBhbmQgZmFtaWx5TmFtZSBpcyBudWxsIG9yIGVtcHR5XFxuLy8gdGhlbiBhZGQgYSBib29sZWFuIGZsYWcgdG8gdGhlIHNoYXJlZCBzdGF0ZSB0byBpbmRpY2F0ZSBuYW1lcyBhcmUgbm90IHByZXNlbnRcXG4vLyB0aGlzIGNvdWxkIGJlIHVzZWQgZWxzZXdoZXJlXFxuLy8gZm9yIGVnLiB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gYSBzY3JpcHRlZCBkZWNpc2lvbiBub2RlIHRvIGJ5LXBhc3MgcGF0Y2hpbmdcXG4vLyB0aGUgdXNlciBvYmplY3Qgd2l0aCBibGFuayB2YWx1ZXMgd2hlbiBnaXZlbk5hbWUgIGFuZCBmYW1pbHlOYW1lIGlzIG5vdCBwcmVzZW50XFxuYm9vbGVhbiBub0dpdmVuTmFtZSA9IG5vcm1hbGl6ZWRQcm9maWxlLmdpdmVuTmFtZS5pc051bGwoKSB8fCAoIW5vcm1hbGl6ZWRQcm9maWxlLmdpdmVuTmFtZS5hc1N0cmluZygpPy50cmltKCkpXFxuYm9vbGVhbiBub0ZhbWlseU5hbWUgPSBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZmFtaWx5TmFtZS5hc1N0cmluZygpPy50cmltKCkpXFxuc2hhcmVkU3RhdGUucHV0KFxcXCJuYW1lRW1wdHlPck51bGxcXFwiLCBub0dpdmVuTmFtZSAmJiBub0ZhbWlseU5hbWUpXFxuXFxucmV0dXJuIG1hbmFnZWRVc2VyXFxuXCJcbiI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"703dab1a-1921-4981-98dd-b8e5349d8548\",\"name\":\"Device Id (Match) - Server Side\",\"description\":\"Default global script for server side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAyMyBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIFNjYWxhckNvbXBhcmF0b3IgPSB7fSwgU2NyZWVuQ29tcGFyYXRvciA9IHt9LCBNdWx0aVZhbHVlQ29tcGFyYXRvciA9IHt9LCBVc2VyQWdlbnRDb21wYXJhdG9yID0ge30sIEdlb2xvY2F0aW9uQ29tcGFyYXRvciA9IHt9OwoKdmFyIGNvbmZpZyA9IHsKICAgIHByb2ZpbGVFeHBpcmF0aW9uOiAzMCwgICAgICAgICAgICAgIC8vaW4gZGF5cwogICAgbWF4UHJvZmlsZXNBbGxvd2VkOiA1LAogICAgbWF4UGVuYWx0eVBvaW50czogMCwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBzY3JlZW46IHsKICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICAgIGNvbXBhcmF0b3I6IFNjcmVlbkNvbXBhcmF0b3IsCiAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDUwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHBsdWdpbnM6IHsKICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luczogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb250czogewogICAgICAgICAgICBpbnN0YWxsZWRGb250czogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogU2NhbGFyQ29tcGFyYXRvciwKICAgICAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdXNlckFnZW50OiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgICBjb21wYXJhdG9yOiBVc2VyQWdlbnRDb21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBpZ25vcmVWZXJzaW9uOiB0cnVlLAogICAgICAgICAgICAgICAgcGVuYWx0eVBvaW50czogMTAwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdlb2xvY2F0aW9uOiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICAgICAgY29tcGFyYXRvcjogR2VvbG9jYXRpb25Db21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBhbGxvd2VkUmFuZ2U6IDEwMCwgICAgICAgICAgICAvL2luIG1pbGVzCiAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJhdG9yIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgp2YXIgYWxsLCBhbnksIGNhbGN1bGF0ZURpc3RhbmNlLCBjYWxjdWxhdGVJbnRlcnNlY3Rpb24sIGNhbGN1bGF0ZVBlcmNlbnRhZ2UsIG51bGxPclVuZGVmaW5lZCwgc3BsaXRBbmRUcmltLAogICAgdW5kZWZpbmVkTG9jYXRpb247CgovLyBDb21wYXJpc29uUmVzdWx0CgovKioKICogQ29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gcGVuYWx0eSBwb2ludHMuCiAqCiAqIEBwYXJhbSBwZW5hbHR5UG9pbnRzIChOdW1iZXIpIFRoZSBwZW5hbHR5IHBvaW50cyBmb3IgdGhlIGNvbXBhcmlzb24gKGRlZmF1bHRzIHRvIDApLgogKiBAcGFyYW0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSAoYm9vbGVhbikgV2hldGhlciB0aGUgY3VycmVudCB2YWx1ZSBjb250YWlucyBtb3JlIGluZm9ybWF0aW9uCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBzdG9yZWQgdmFsdWUgKGRlZmF1bHRzIHRvIGZhbHNlKS4KICovCmZ1bmN0aW9uIENvbXBhcmlzb25SZXN1bHQoKSB7CgogICAgdmFyIHBlbmFsdHlQb2ludHMgPSAwLAogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBmYWxzZTsKCiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBhcmd1bWVudHNbMV07CiAgICB9CgogICAgaWYgKGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkICYmIGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZihhcmd1bWVudHNbMF0pID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSA9IGFyZ3VtZW50c1swXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIH0KICAgIH0KCiAgICB0aGlzLnBlbmFsdHlQb2ludHMgPSBwZW5hbHR5UG9pbnRzOwogICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZTsKCn0KCkNvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUyA9IG5ldyBDb21wYXJpc29uUmVzdWx0KDApOwoKLyoqCiAqIFN0YXRpYyBtZXRob2QgZm9yIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcuCiAqCiAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkuCiAqLwpDb21wYXJpc29uUmVzdWx0LmlzU3VjY2Vzc2Z1bCA9ICBmdW5jdGlvbihjb21wYXJpc29uUmVzdWx0KSB7CiAgICByZXR1cm4gY29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKTsKfTsKCgovKioKICogU3RhdGljIG1ldGhvZCBmb3IgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4KICoKICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gIGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHJldHVybiBjb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU7Cn07CgovKioKICogQ29tcGFyaXNvbiBmdW5jdGlvbiB0aGF0IGNhbiBiZSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0byBhcnJheS5zb3J0CiAqLwpDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUgPSBmdW5jdGlvbihmaXJzdCwgc2Vjb25kKSB7CiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGZpcnN0KSAmJiBudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoZmlyc3QpKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAxOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoZmlyc3QucGVuYWx0eVBvaW50cyAhPT0gc2Vjb25kLnBlbmFsdHlQb2ludHMpIHsKICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnBlbmFsdHlQb2ludHMgLSBzZWNvbmQucGVuYWx0eVBvaW50czsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gKGZpcnN0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCkgLSAoc2Vjb25kLmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCk7CiAgICAgICAgfQogICAgfQp9OwoKLyoqCiAqIEFtYWxnYW1hdGVzIHRoZSBnaXZlbiBDb21wYXJpc29uUmVzdWx0IGludG8gdGhpcyBDb21wYXJpc29uUmVzdWx0LgogKgogKiBAcGFyYW0gY29tcGFyaXNvblJlc3VsdCBUaGUgQ29tcGFyaXNvblJlc3VsdCB0byBpbmNsdWRlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5wcm90b3R5cGUuYWRkQ29tcGFyaXNvblJlc3VsdCA9IGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHRoaXMucGVuYWx0eVBvaW50cyArPSBjb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHM7CiAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKSB7CiAgICAgICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlOwogICAgfQp9OwoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBubyBwZW5hbHR5IHBvaW50cyBoYXZlIGJlZW4gYXNzaWduZWQgZm9yIHRoZSBjb21wYXJpc29uLgogKgogKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgY29tcGFyaXNvbiB3YXMgc3VjY2Vzc2Z1bC4KICovCkNvbXBhcmlzb25SZXN1bHQucHJvdG90eXBlLmlzU3VjY2Vzc2Z1bCA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZCh0aGlzLnBlbmFsdHlQb2ludHMpIHx8IHRoaXMucGVuYWx0eVBvaW50cyA9PT0gMDsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gc2ltcGxlIG9iamVjdHMgKFN0cmluZ3xOdW1iZXIpIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybwogKiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIGN1cnJlbnQgdmFsdWUuCiAqIEBwYXJhbSBzdG9yZWRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIHN0b3JlZCB2YWx1ZS4KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0LgogKi8KU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlID0gZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUsIGNvbmZpZykgewogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlN0cmluZ0NvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOnN0b3JlZFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoc3RvcmVkVmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOmNvbmZpZzogIiArIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpOwogICAgfQogICAgaWYgKGNvbmZpZy5wZW5hbHR5UG9pbnRzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUzsKICAgIH0KCiAgICBpZiAoIW51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgfHwgY3VycmVudFZhbHVlICE9PSBzdG9yZWRWYWx1ZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoIW51bGxPclVuZGVmaW5lZChjdXJyZW50VmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KHRydWUpOwogICAgfQoKICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7Cn07CgovKioKICogQ29tcGFyZXMgdHdvIHNjcmVlbnMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsIHRoZW4gcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB6ZXJvIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLAogKiBvdGhlcndpc2UgcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiB7CiAqICAgICAgICAgICAgInNjcmVlbldpZHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBoZWlnaHQuCiAqICAgICAgICAgICAgInNjcmVlbkNvbG91ckRlcHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBjb2xvdXIgZGVwdGguCiAqICAgICAgICB9CiAqIEBwYXJhbSBzdG9yZWRWYWx1ZTogewogKiAgICAgICAgICAgICJzY3JlZW5XaWR0aCI6IChOdW1iZXIpIFRoZSBzdG9yZWQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIHN0b3JlZCBjbGllbnQgc2NyZWVuIGhlaWdodC4KICogICAgICAgICAgICAic2NyZWVuQ29sb3VyRGVwdGgiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGNsaWVudCBzY3JlZW4gY29sb3VyIGRlcHRoLgogKiAgICAgICAgfQogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgInBlbmFsdHlQb2ludHMiOiAoTnVtYmVyKSBUaGUgbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzLgogKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovClNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTY3JlZW5Db21wYXJhdG9yLmNvbXBhcmU6Y3VycmVudFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICBjdXJyZW50VmFsdWUgPSB7c2NyZWVuV2lkdGg6IG51bGwsIHNjcmVlbkhlaWdodDogbnVsbCwgc2NyZWVuQ29sb3VyRGVwdGg6IG51bGx9OwogICAgfQogICAgaWYgKG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBzdG9yZWRWYWx1ZSA9IHtzY3JlZW5XaWR0aDogbnVsbCwgc2NyZWVuSGVpZ2h0OiBudWxsLCBzY3JlZW5Db2xvdXJEZXB0aDogbnVsbH07CiAgICB9CgogICAgdmFyIGNvbXBhcmlzb25SZXN1bHRzID0gWwogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuV2lkdGgsIHN0b3JlZFZhbHVlLnNjcmVlbldpZHRoLCBjb25maWcpLAogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuSGVpZ2h0LCBzdG9yZWRWYWx1ZS5zY3JlZW5IZWlnaHQsIGNvbmZpZyksCiAgICAgICAgU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlKGN1cnJlbnRWYWx1ZS5zY3JlZW5Db2xvdXJEZXB0aCwgc3RvcmVkVmFsdWUuc2NyZWVuQ29sb3VyRGVwdGgsIGNvbmZpZyldOwoKICAgIGlmIChhbGwoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKSkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChhbnkoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgfQp9OwoKLyoqCiAqIFNwbGl0cyBib3RoIHZhbHVlcyB1c2luZyBkZWxpbWl0ZXIsIHRyaW1zIGV2ZXJ5IHZhbHVlIGFuZCBjb21wYXJlcyBjb2xsZWN0aW9ucyBvZiB2YWx1ZXMuCiAqIFJldHVybnMgemVyby1yZXN1bHQgZm9yIHNhbWUgbXVsdGktdmFsdWUgYXR0cmlidXRlcy4KICoKICogSWYgY29sbGVjdGlvbnMgYXJlIG5vdCBzYW1lIGNoZWNrcyBpZiBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaXMgbGVzcyBvciBlcXVhbCBtYXhEaWZmZXJlbmNlcyBvcgogKiBwZXJjZW50YWdlIG9mIGRpZmZlcmVuY2UgaXMgbGVzcyBvciBlcXVhbCBtYXhQZXJjZW50YWdlRGlmZmVyZW5jZS4KICoKICogSWYgeWVzIHRoZW4gcmV0dXJucyB6ZXJvLXJlc3VsdCB3aXRoIGFkZGl0aW9uYWwgaW5mbywgZWxzZSByZXR1cm5zIHBlbmFsdHlQb2ludHMtcmVzdWx0LgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlOiAoU3RyaW5nKSBUaGUgc3RvcmVkIHZhbHVlLgogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgIm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlIjogKE51bWJlcikgVGhlIG1heCBkaWZmZXJlbmNlIHBlcmNlbnRhZ2UgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgaXMgYXNzaWduZWQuCiAqICAgICAgICAgICAgIm1heERpZmZlcmVuY2VzIjogKE51bWJlcikgVGhlIG1heCBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgcG9pbnRzIGFyZSBhc3NpZ25lZC4KICogICAgICAgICAgICAicGVuYWx0eVBvaW50cyI6IChOdW1iZXIpIFRoZSBudW1iZXIgb2YgcGVuYWx0eSBwb2ludHMuCiAgKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovCk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgdmFyIGRlbGltaXRlciA9ICI7IiwKICAgICAgICBjdXJyZW50VmFsdWVzID0gc3BsaXRBbmRUcmltKGN1cnJlbnRWYWx1ZSwgZGVsaW1pdGVyKSwKICAgICAgICBzdG9yZWRWYWx1ZXMgPSBzcGxpdEFuZFRyaW0oc3RvcmVkVmFsdWUsIGRlbGltaXRlciksCiAgICAgICAgbWF4TnVtYmVyT2ZFbGVtZW50cyA9IE1hdGgubWF4KGN1cnJlbnRWYWx1ZXMubGVuZ3RoLCBzdG9yZWRWYWx1ZXMubGVuZ3RoKSwKICAgICAgICBudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9IGNhbGN1bGF0ZUludGVyc2VjdGlvbihjdXJyZW50VmFsdWVzLCBzdG9yZWRWYWx1ZXMpLmxlbmd0aCwKICAgICAgICBudW1iZXJPZkRpZmZlcmVuY2VzID0gbWF4TnVtYmVyT2ZFbGVtZW50cyAtIG51bWJlck9mVGhlU2FtZUVsZW1lbnRzLAogICAgICAgIHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzID0gY2FsY3VsYXRlUGVyY2VudGFnZShudW1iZXJPZkRpZmZlcmVuY2VzLCBtYXhOdW1iZXJPZkVsZW1lbnRzKTsKCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKHN0b3JlZFZhbHVlKSAmJiAhbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UobnVtYmVyT2ZUaGVTYW1lRWxlbWVudHMgKyAiIG9mICIgKyBtYXhOdW1iZXJPZkVsZW1lbnRzICsgIiBhcmUgc2FtZSIpOwogICAgfQoKICAgIGlmIChtYXhOdW1iZXJPZkVsZW1lbnRzID09PSAwKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBubyBhdHRyaWJ1dGVzIGZvdW5kIGluIGJvdGggcHJvZmlsZXMiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9PT0gbWF4TnVtYmVyT2ZFbGVtZW50cykgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJJZ25vcmVkIGJlY2F1c2UgYWxsIGF0dHJpYnV0ZXMgYXJlIHNhbWUiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZkRpZmZlcmVuY2VzID4gY29uZmlnLm1heERpZmZlcmVuY2VzKSB7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJXb3VsZCBiZSBpZ25vcmVkIGlmIG5vdCBtb3JlIHRoYW4gIiArIGNvbmZpZy5tYXhEaWZmZXJlbmNlcyArICIgZGlmZmVyZW5jZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KCiAgICBpZiAocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgPiBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgKyAiIHBlcmNlbnRzIGFyZSBkaWZmZXJlbnQiKTsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIldvdWxkIGJlIGlnbm9yZWQgaWYgbm90IG1vcmUgdGhhbiAiICsgY29uZmlnLm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlICsgIiBwZXJjZW50Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChjb25maWcucGVuYWx0eVBvaW50cyk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBudW1iZXIgb2YgZGlmZmVyZW5jZXMoIiArIG51bWJlck9mRGlmZmVyZW5jZXMgKyAiKSBub3QgbW9yZSB0aGFuICIKICAgICAgICAgICAgKyBjb25maWcubWF4RGlmZmVyZW5jZXMpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzICsgIiBwZXJjZW50cyBhcmUgZGlmZmVyZW50Iik7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBub3QgbW9yZSB0aGFuICIgKyBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UgKyAiIHBlcmNlbnQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdCh0cnVlKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gVXNlciBBZ2VudCBTdHJpbmdzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybyBwZW5hbHR5CiAqIHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlIChTdHJpbmcpIFRoZSBzdG9yZWQgdmFsdWUuCiAqIEBwYXJhbSBjb25maWc6IHsKICogICAgICAgICAgICAiaWdub3JlVmVyc2lvbiI6IChib29sZWFuKSBJZiB0aGUgdmVyc2lvbiBudW1iZXJzIGluIHRoZSBVc2VyIEFnZW50IFN0cmluZ3Mgc2hvdWxkIGJlIGlnbm9yZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb21wYXJpc29uLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBBIENvbXBhcmlzb25SZXN1bHQuCiAqLwpVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiVXNlckFnZW50Q29tcGFyYXRvci5jb21wYXJlOmN1cnJlbnRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgaWYgKGNvbmZpZy5pZ25vcmVWZXJzaW9uKSB7CiAgICAgICAgLy8gcmVtb3ZlIHZlcnNpb24gbnVtYmVyCiAgICAgICAgY3VycmVudFZhbHVlID0gbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgPyBudWxsIDogY3VycmVudFZhbHVlLnJlcGxhY2UoL1tcZFwuXSsvZywgIiIpLnRyaW0oKTsKICAgICAgICBzdG9yZWRWYWx1ZSA9IG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkgPyBudWxsIDogc3RvcmVkVmFsdWUucmVwbGFjZSgvW1xkXC5dKy9nLCAiIikudHJpbSgpOwogICAgfQoKICAgIHJldHVybiBTY2FsYXJDb21wYXJhdG9yLmNvbXBhcmUoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gbG9jYXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IGEgZGVncmVlIG9mIGRpZmZlcmVuY2UuCiAqCiAqIEBwYXJhbSBjdXJyZW50VmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgY3VycmVudCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGN1cnJlbnQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcGFyYW0gc3RvcmVkVmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxhdGl0dWRlLgogKiAgICAgICAgICAgICJsb25naXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJhbGxvd2VkUmFuZ2UiOiAoTnVtYmVyKSBUaGUgbWF4IGRpZmZlcmVuY2UgYWxsb3dlZCBpbiB0aGUgdHdvIGxvY2F0aW9ucywgYmVmb3JlIHRoZSBwZW5hbHR5IGlzIGFzc2lnbmVkLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KKiAgICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0CiAqLwpHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiR2VvbG9jYXRpb25Db21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICAvLyBDaGVjayBmb3IgdW5kZWZpbmVkIHN0b3JlZCBvciBjdXJyZW50IGxvY2F0aW9ucwoKICAgIGlmICh1bmRlZmluZWRMb2NhdGlvbihjdXJyZW50VmFsdWUpICYmIHVuZGVmaW5lZExvY2F0aW9uKHN0b3JlZFZhbHVlKSkgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CiAgICBpZiAodW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiAhdW5kZWZpbmVkTG9jYXRpb24oc3RvcmVkVmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KICAgIGlmICghdW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiB1bmRlZmluZWRMb2NhdGlvbihzdG9yZWRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgLy8gQm90aCBsb2NhdGlvbnMgZGVmaW5lZCwgdGhlcmVmb3JlIHBlcmZvcm0gY29tcGFyaXNvbgoKICAgIHZhciBkaXN0YW5jZSA9IGNhbGN1bGF0ZURpc3RhbmNlKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUpOwoKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJEaXN0YW5jZSBiZXR3ZWVuICgiICsgY3VycmVudFZhbHVlLmxhdGl0dWRlICsgIiwiICsgY3VycmVudFZhbHVlLmxvbmdpdHVkZSArICIpIGFuZCAoIiArCiAgICAgICAgICAgIHN0b3JlZFZhbHVlLmxhdGl0dWRlICsgIiwiICsgc3RvcmVkVmFsdWUubG9uZ2l0dWRlICsgIikgaXMgIiArIGRpc3RhbmNlICsgIiBtaWxlcyIpOwogICAgfQoKICAgIGlmIChwYXJzZUZsb2F0KGRpc3RhbmNlLnRvUHJlY2lzaW9uKDUpKSA9PT0gMCkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJMb2NhdGlvbiBpcyB0aGUgc2FtZSIpOwogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CgogICAgaWYgKGRpc3RhbmNlIDw9IGNvbmZpZy5hbGxvd2VkUmFuZ2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlRvbGVyYXRlZCBiZWNhdXNlIGRpc3RhbmNlIG5vdCBtb3JlIHRoZW4gIiArIGNvbmZpZy5hbGxvd2VkUmFuZ2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiV291bGQgYmUgaWdub3JlZCBpZiBkaXN0YW5jZSBub3QgbW9yZSB0aGVuICIgKyBjb25maWcuYWxsb3dlZFJhbmdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KfTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi8vICAgICAgICAgICAgICAgICAgICBEZXZpY2UgUHJpbnQgTG9naWMgLSBETyBOT1QgTU9ESUZZICAgICAgICAgICAgICAgICAgICAgLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKLy8gVXRpbGl0eSBmdW5jdGlvbnMKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgZXZhbHVhdGluZyBmdW5jdGlvbiBmIG9uIGVhY2ggZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYWxsID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn07CgovKioKICogUmV0dXJucyB0cnVlIGlmIGV2YWx1YXRpbmcgZnVuY3Rpb24gZiBvbiBhbnkgZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYW55ID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGlzIG51bGwgb3IgaGFzIHVuZGVmaW5lZCBsb25naXR1ZGUgb3IgbGF0aXR1ZGUgdmFsdWVzLgogKgogKiBAcGFyYW0gbG9jYXRpb246IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBsb25naXR1ZGUuCiAqICAgICAgICB9CiAqIEByZXR1cm4gYm9vbGVhbgogKi8KdW5kZWZpbmVkTG9jYXRpb24gPSBmdW5jdGlvbihsb2NhdGlvbikgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZChsb2NhdGlvbikgfHwgbnVsbE9yVW5kZWZpbmVkKGxvY2F0aW9uLmxhdGl0dWRlKSB8fCBudWxsT3JVbmRlZmluZWQobG9jYXRpb24ubG9uZ2l0dWRlKTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLgogKgogKiBAcGFyYW0gdmFsdWU6IGEgdmFsdWUgb2YgYW55IHR5cGUKICogQHJldHVybiBib29sZWFuCiAqLwpudWxsT3JVbmRlZmluZWQgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7Cn07CgovKioKICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHR3byBsb2NhdGlvbnMuCiAqCiAqIEBwYXJhbSBmaXJzdDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBmaXJzdCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGZpcnN0IGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIHNlY29uZDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcmV0dXJuIE51bWJlciBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHdvIGxvY2F0aW9ucy4KICovCmNhbGN1bGF0ZURpc3RhbmNlID0gZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkgewogICAgdmFyIGZhY3RvciA9IChNYXRoLlBJIC8gMTgwKSwKICAgICAgICB0aGV0YSwKICAgICAgICBkaXN0OwogICAgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7CiAgICAgICAgcmV0dXJuIGRlZ3JlZXMgKiBmYWN0b3I7CiAgICB9CiAgICBmdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHsKICAgICAgICByZXR1cm4gcmFkaWFucyAvIGZhY3RvcjsKICAgIH0KICAgIHRoZXRhID0gZmlyc3QubG9uZ2l0dWRlIC0gc2Vjb25kLmxvbmdpdHVkZTsKICAgIGRpc3QgPSBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKyBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHRoZXRhKSk7CiAgICBkaXN0ID0gTWF0aC5hY29zKGRpc3QpOwogICAgZGlzdCA9IHJhZGlhbnNUb0RlZ3JlZXMoZGlzdCk7CiAgICBkaXN0ID0gZGlzdCAqIDYwICogMS4xNTE1OwogICAgcmV0dXJuIGRpc3Q7Cn07CgovKioKICogQ29udmVydHMgYSBTdHJpbmcgaG9sZGluZyBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW50byBhbiBhcnJheS4KICoKICogQHBhcmFtIHRleHQgKFN0cmluZykgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMuCiAqIEBwYXJhbSBkZWxpbWl0ZXIgKFN0cmluZykgVGhlIGNoYXJhY3RlciBkZWxpbWl0aW5nIHZhbHVlcyB3aXRoaW4gdGhlIHRleHQgU3RyaW5nLgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCiAqLwpzcGxpdEFuZFRyaW0gPSBmdW5jdGlvbih0ZXh0LCBkZWxpbWl0ZXIpIHsKCiAgICB2YXIgcmVzdWx0cyA9IFtdLAogICAgICAgIGksCiAgICAgICAgdmFsdWVzLAogICAgICAgIHZhbHVlOwogICAgaWYgKHRleHQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KCiAgICB2YWx1ZXMgPSB0ZXh0LnNwbGl0KGRlbGltaXRlcik7CiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaV0udHJpbSgpOwogICAgICAgIGlmICh2YWx1ZSAhPT0gIiIpIHsKICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdHM7Cn07CgovKioKICogQ29udmVydHMgdmFsdWUgdG8gYSBwZXJjZW50YWdlIG9mIHJhbmdlLgogKgogKiBAcGFyYW0gdmFsdWUgKE51bWJlcikgVGhlIGFjdHVhbCBudW1iZXIgdG8gYmUgY29udmVydGVkIHRvIGEgcGVyY2VudGFnZS4KICogQHBhcmFtIHJhbmdlIChOdW1iZXIpIFRoZSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIChpLmUuIHJlcHJlc2VudHMgMTAwJSkuCiAqIEByZXR1cm4gKE51bWJlcikgVGhlIHBlcmNlbnRhZ2UuCiAqLwpjYWxjdWxhdGVQZXJjZW50YWdlID0gZnVuY3Rpb24odmFsdWUsIHJhbmdlKSB7CiAgICBpZiAocmFuZ2UgPT09IDApIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBwYXJzZUZsb2F0KCh2YWx1ZSAvIHJhbmdlKS50b1ByZWNpc2lvbigyKSkgKiAxMDA7Cn07CgovKioKICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb250YWluaW5nIG9ubHkgdGhvc2UgZWxlbWVudHMgZm91bmQgaW4gYm90aCBhcnJheXMgcmVjZWl2ZWQgYXMgYXJndW1lbnRzLgogKgogKiBAcGFyYW0gZmlyc3QgKEFycmF5KSBUaGUgZmlyc3QgYXJyYXkuCiAqIEBwYXJhbSBzZWNvbmQgKEFycmF5KSBUaGUgc2Vjb25kIGFycmF5LgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGVsZW1lbnRzIHRoYXQgZm91bmQgaW4gZmlyc3QgYW5kIHNlY29uZC4KICovCmNhbGN1bGF0ZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQpIHsKICAgIHJldHVybiBmaXJzdC5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgIHJldHVybiBzZWNvbmQuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7CiAgICB9KTsKfTsKCmZ1bmN0aW9uIGdldFZhbHVlKG9iaiwgYXR0cmlidXRlUGF0aCkgewogICAgdmFyIHZhbHVlID0gb2JqLAogICAgICAgIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlUGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICB2YWx1ZSA9IHZhbHVlW2F0dHJpYnV0ZVBhdGhbaV1dOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwp9CgoKZnVuY3Rpb24gaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWcpIHsKICAgIHJldHVybiBhdHRyaWJ1dGVDb25maWcuY29tcGFyYXRvciAhPT0gdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcsIGF0dHJpYnV0ZVBhdGgpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBbXSwKICAgICAgICBhdHRyaWJ1dGVOYW1lLAogICAgICAgIGF0dHJQYXRocywKICAgICAgICBhdHRyUGF0aCwKICAgICAgICBpOwoKICAgIGZvciAoYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVDb25maWcpIHsKICAgICAgICBpZiAoYXR0cmlidXRlQ29uZmlnLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7CgogICAgICAgICAgICBpZiAoaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWdbYXR0cmlidXRlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBhdHRyUGF0aCA9IGF0dHJpYnV0ZVBhdGguc2xpY2UoKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRoLnB1c2goYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVQYXRocy5wdXNoKGF0dHJQYXRoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJQYXRoID0gYXR0cmlidXRlUGF0aC5zbGljZSgpOwogICAgICAgICAgICAgICAgYXR0clBhdGgucHVzaChhdHRyaWJ1dGVOYW1lKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRocyA9IGdldEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZ1thdHRyaWJ1dGVOYW1lXSwgYXR0clBhdGgpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGF0dHJQYXRocy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVBhdGhzLnB1c2goYXR0clBhdGhzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXR0cmlidXRlUGF0aHM7Cn0KCmZ1bmN0aW9uIGdldERldmljZVByaW50QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnKSB7CiAgICByZXR1cm4gZ2V0QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnLCBbXSk7Cn0KCmZ1bmN0aW9uIGhhc1JlcXVpcmVkQXR0cmlidXRlcyhkZXZpY2VQcmludCwgYXR0cmlidXRlQ29uZmlnKSB7CgogICAgdmFyIGF0dHJpYnV0ZVBhdGhzID0gZ2V0RGV2aWNlUHJpbnRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcpLAogICAgICAgIGksCiAgICAgICAgYXR0clZhbHVlLAogICAgICAgIGF0dHJDb25maWc7CgogICAgZm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZVBhdGhzLmxlbmd0aDsgaSsrKSB7CgogICAgICAgIGF0dHJWYWx1ZSA9IGdldFZhbHVlKGRldmljZVByaW50LCBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICBpZiAoYXR0ckNvbmZpZy5yZXF1aXJlZCAmJiBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBsb2dnZXIud2FybmluZygiRGV2aWNlIFByaW50IHByb2ZpbGUgbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUsICIgKyBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZSBwcmludCBoYXMgcmVxdWlyZWQgYXR0cmlidXRlcyIpOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGF0dHJpYnV0ZUNvbmZpZywgZGV2aWNlUHJpbnQsIGRldmljZVByaW50UHJvZmlsZXMsIG1heFBlbmFsdHlQb2ludHMpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBnZXREZXZpY2VQcmludEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZyksCiAgICAgICAgZGFvID0gc2hhcmVkU3RhdGUuZ2V0KCdfRGV2aWNlSWREYW8nKSwKICAgICAgICByZXN1bHRzLAogICAgICAgIGosCiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQsCiAgICAgICAgaSwKICAgICAgICBjdXJyZW50VmFsdWUsCiAgICAgICAgc3RvcmVkVmFsdWUsCiAgICAgICAgYXR0ckNvbmZpZywKICAgICAgICBjb21wYXJpc29uUmVzdWx0LAogICAgICAgIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICBzZWxlY3RlZFByb2ZpbGUsCiAgICAgICAgY3VyRGV2aWNlUHJpbnRQcm9maWxlLAogICAgICAgIHZhbHM7CgogICAgcmVzdWx0cyA9IFtdOwogICAgZm9yIChqID0gMDsgaiA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBjdXJEZXZpY2VQcmludFByb2ZpbGUgPSBKU09OLnBhcnNlKG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvbihkZXZpY2VQcmludFByb2ZpbGVzW2pdKSk7CiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQgPSBuZXcgQ29tcGFyaXNvblJlc3VsdCgpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdHRyaWJ1dGVQYXRocy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY3VycmVudFZhbHVlID0gZ2V0VmFsdWUoZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgc3RvcmVkVmFsdWUgPSBnZXRWYWx1ZShjdXJEZXZpY2VQcmludFByb2ZpbGUuZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICAgICAgaWYgKHN0b3JlZFZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gbmV3IENvbXBhcmlzb25SZXN1bHQoYXR0ckNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSBhdHRyQ29uZmlnLmNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBhdHRyQ29uZmlnLmFyZ3MpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJDb21wYXJpbmcgYXR0cmlidXRlIHBhdGg6ICIgKyBhdHRyaWJ1dGVQYXRoc1tpXQogICAgICAgICAgICAgICAgICAgICsgIiwgQ29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkgKyAiLCBwZW5hbHR5UG9pbnRzPSIKICAgICAgICAgICAgICAgICAgICArIGNvbXBhcmlzb25SZXN1bHQucGVuYWx0eVBvaW50cyArICIsIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU9IgogICAgICAgICAgICAgICAgICAgICsgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5hZGRDb21wYXJpc29uUmVzdWx0KGNvbXBhcmlzb25SZXN1bHQpOwogICAgICAgIH0KICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkFnZ3JlZ2F0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKSArICIsIHBlbmFsdHlQb2ludHM9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICAgICArIGFnZ3JlZ2F0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cy5wdXNoKHsKICAgICAgICAgICAga2V5OiBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICAgICAgdmFsdWU6IGRldmljZVByaW50UHJvZmlsZXNbal0KICAgICAgICB9KTsKICAgIH0KCiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXN1bHRzLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUoYS5rZXksIGIua2V5KTsKICAgIH0pOwogICAgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0ID0gcmVzdWx0c1swXS5rZXk7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU2VsZWN0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKQogICAgICAgICAgICArICIsIHBlbmFsdHlQb2ludHM9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgfQoKICAgIHNlbGVjdGVkUHJvZmlsZSA9IG51bGw7CiAgICBpZiAoc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgPD0gbWF4UGVuYWx0eVBvaW50cykgewogICAgICAgIHNlbGVjdGVkUHJvZmlsZSA9IHJlc3VsdHNbMF0udmFsdWU7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTZWxlY3RlZCBwcm9maWxlOiAiICsgc2VsZWN0ZWRQcm9maWxlICsKICAgICAgICAgICAgICAgICIgd2l0aCAiICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgKyAiIHBlbmFsdHkgcG9pbnRzIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChzZWxlY3RlZFByb2ZpbGUgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyogdXBkYXRlIHByb2ZpbGUgKi8KICAgIHNlbGVjdGVkUHJvZmlsZS5wdXQoInNlbGVjdGlvbkNvdW50ZXIiLAogICAgICAgIGphdmEubGFuZy5JbnRlZ2VyLnZhbHVlT2YocGFyc2VJbnQoc2VsZWN0ZWRQcm9maWxlLmdldCgic2VsZWN0aW9uQ291bnRlciIpLCAxMCkgKyAxKSk7CiAgICBzZWxlY3RlZFByb2ZpbGUucHV0KCJsYXN0U2VsZWN0ZWREYXRlIiwgamF2YS5sYW5nLkxvbmcudmFsdWVPZihuZXcgRGF0ZSgpLmdldFRpbWUoKSkpOwogICAgc2VsZWN0ZWRQcm9maWxlLnB1dCgiZGV2aWNlUHJpbnQiLCBkZXZpY2VQcmludCk7CgogICAgdmFscyA9IFtdOwogICAgZm9yIChpID0gMDsgaSA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWxzLnB1c2gob3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uKGRldmljZVByaW50UHJvZmlsZXNbaV0pKTsKICAgIH0KCiAgICBkYW8uc2F2ZURldmljZVByb2ZpbGVzKHVzZXJuYW1lLCByZWFsbSwgdmFscyk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIG1hdGNoRGV2aWNlUHJpbnQoKSB7CgogICAgaWYgKCF1c2VybmFtZSkgewogICAgICAgIGxvZ2dlci5lcnJvcigiVXNlcm5hbWUgbm90IHNldC4gQ2Fubm90IGNvbXBhcmUgdXNlcidzIGRldmljZSBwcmludCBwcm9maWxlcy4iKTsKICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICB9IGVsc2UgewoKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImNsaWVudCBkZXZpY2VQcmludDogIiArIGNsaWVudFNjcmlwdE91dHB1dERhdGEpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGdldFByb2ZpbGVzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXhwaXJlZFByb2ZpbGUoZGV2aWNlUHJpbnRQcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNlbGVjdGVkRGF0ZTsKICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uRGF0ZS5zZXREYXRlKGV4cGlyYXRpb25EYXRlLmdldERhdGUoKSAtIGNvbmZpZy5wcm9maWxlRXhwaXJhdGlvbik7CgogICAgICAgICAgICAgICAgICAgIGxhc3RTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkZXZpY2VQcmludFByb2ZpbGUubGFzdFNlbGVjdGVkRGF0ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0U2VsZWN0ZWREYXRlIDwgZXhwaXJhdGlvbkRhdGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBkYW8gPSBzaGFyZWRTdGF0ZS5nZXQoJ19EZXZpY2VJZERhbycpLAogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVyOwoKICAgICAgICAgICAgICAgICAgICBwcm9maWxlcyA9IGRhby5nZXREZXZpY2VQcm9maWxlcyh1c2VybmFtZSwgcmVhbG0pOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXRlciA9IHByb2ZpbGVzLml0ZXJhdG9yKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgPSBpdGVyLm5leHQoKS5nZXRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeHBpcmVkUHJvZmlsZShwcm9maWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChwcm9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoInN0b3JlZCBub24tZXhwaXJlZCBwcm9maWxlczogIiArIHJlc3VsdHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRldmljZVByaW50ID0gSlNPTi5wYXJzZShjbGllbnRTY3JpcHRPdXRwdXREYXRhKSwKICAgICAgICAgICAgZGV2aWNlUHJpbnRQcm9maWxlcyA9IGdldFByb2ZpbGVzKCk7CgogICAgICAgIGlmICghaGFzUmVxdWlyZWRBdHRyaWJ1dGVzKGRldmljZVByaW50LCBjb25maWcuYXR0cmlidXRlcykpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZVByaW50Lmhhc1JlcXVpcmVkQXR0cmlidXRlczogZmFsc2UiKTsKICAgICAgICAgICAgLy8gV2lsbCBmYWlsIHRoaXMgbW9kdWxlIGJ1dCBmYWxsLXRocm91Z2ggdG8gbmV4dCBtb2R1bGUuIFdoaWNoIHNob3VsZCBiZSBPVFAuCiAgICAgICAgICAgIGF1dGhTdGF0ZSA9IEZBSUxFRDsKICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGNvbmZpZy5hdHRyaWJ1dGVzLCBkZXZpY2VQcmludCwgZGV2aWNlUHJpbnRQcm9maWxlcywgY29uZmlnLm1heFBlbmFsdHlQb2ludHMpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJkZXZpY2VQcmludC5oYXNWYWxpZFByb2ZpbGU6IHRydWUiKTsKICAgICAgICAgICAgYXV0aFN0YXRlID0gU1VDQ0VTUzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiZGV2aWNlUHJpbnQuaGFzVmFsaWRQcm9maWxlOiBmYWxzZSIpOwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ2RldmljZVByaW50UHJvZmlsZScsIEpTT04uc3RyaW5naWZ5KGRldmljZVByaW50KSk7CiAgICAgICAgICAgIC8vIFdpbGwgZmFpbCB0aGlzIG1vZHVsZSBidXQgZmFsbC10aHJvdWdoIHRvIG5leHQgbW9kdWxlLiBXaGljaCBzaG91bGQgYmUgT1RQLgogICAgICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICAgICAgfQogICAgfQp9CgptYXRjaERldmljZVByaW50KCk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"36863ffb-40ec-48b9-94b1-9a99f71cc3b5\",\"name\":\"OIDC Claims Script\",\"description\":\"Default global script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"157298c0-7d31-4059-a95b-eeb08473b7e5\",\"name\":\"Device Id (Match) - Client Side\",\"description\":\"Default global script for client side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGZvbnREZXRlY3RvciA9IChmdW5jdGlvbiAoKSB7CiAgICAvKioKICAgICAqIEphdmFTY3JpcHQgY29kZSB0byBkZXRlY3QgYXZhaWxhYmxlIGF2YWlsYWJpbGl0eSBvZiBhCiAgICAgKiBwYXJ0aWN1bGFyIGZvbnQgaW4gYSBicm93c2VyIHVzaW5nIEphdmFTY3JpcHQgYW5kIENTUy4KICAgICAqCiAgICAgKiBBdXRob3IgOiBMYWxpdCBQYXRlbAogICAgICogV2Vic2l0ZTogaHR0cDovL3d3dy5sYWxpdC5vcmcvbGFiL2phdmFzY3JpcHQtY3NzLWZvbnQtZGV0ZWN0LwogICAgICogTGljZW5zZTogQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wCiAgICAgKiAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAgICAqIFZlcnNpb246IDAuMTUgKDIxIFNlcCAyMDA5KQogICAgICogICAgICAgICAgQ2hhbmdlZCBjb21wYXJpc2lvbiBmb250IHRvIGRlZmF1bHQgZnJvbSBzYW5zLWRlZmF1bHQtZGVmYXVsdCwKICAgICAqICAgICAgICAgIGFzIGluIEZGMy4wIGZvbnQgb2YgY2hpbGQgZWxlbWVudCBkaWRuJ3QgZmFsbGJhY2sKICAgICAqICAgICAgICAgIHRvIHBhcmVudCBlbGVtZW50IGlmIHRoZSBmb250IGlzIG1pc3NpbmcuCiAgICAgKiBWZXJzaW9uOiAwLjIgKDA0IE1hciAyMDEyKQogICAgICogICAgICAgICAgQ29tcGFyaW5nIGZvbnQgYWdhaW5zdCBhbGwgdGhlIDMgZ2VuZXJpYyBmb250IGZhbWlsaWVzIGllLAogICAgICogICAgICAgICAgJ21vbm9zcGFjZScsICdzYW5zLXNlcmlmJyBhbmQgJ3NhbnMnLiBJZiBpdCBkb2Vzbid0IG1hdGNoIGFsbCAzCiAgICAgKiAgICAgICAgICB0aGVuIHRoYXQgZm9udCBpcyAxMDAlIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbQogICAgICogVmVyc2lvbjogMC4zICgyNCBNYXIgMjAxMikKICAgICAqICAgICAgICAgIFJlcGxhY2VkIHNhbnMgd2l0aCBzZXJpZiBpbiB0aGUgbGlzdCBvZiBiYXNlRm9udHMKICAgICAqLwogICAgLyoKICAgICAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMgRm9yZ2VSb2NrIEFTLgogICAgICovCiAgICB2YXIgZGV0ZWN0b3IgPSB7fSwgYmFzZUZvbnRzLCB0ZXN0U3RyaW5nLCB0ZXN0U2l6ZSwgaCwgcywgZGVmYXVsdFdpZHRoID0ge30sIGRlZmF1bHRIZWlnaHQgPSB7fSwgaW5kZXg7CgogICAgLy8gYSBmb250IHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCBhbGwgdGhlIHRocmVlIGRlZmF1bHQgZm9udHMuCiAgICAvLyBhbmQgaWYgaXQgZG9lc24ndCBtYXRjaCBhbGwgMyB0aGVuIHRoYXQgZm9udCBpcyBub3QgYXZhaWxhYmxlLgogICAgYmFzZUZvbnRzID0gWydtb25vc3BhY2UnLCAnc2Fucy1zZXJpZicsICdzZXJpZiddOwoKICAgIC8vd2UgdXNlIG0gb3IgdyBiZWNhdXNlIHRoZXNlIHR3byBjaGFyYWN0ZXJzIHRha2UgdXAgdGhlIG1heGltdW0gd2lkdGguCiAgICAvLyBBbmQgd2UgdXNlIGEgTExpIHNvIHRoYXQgdGhlIHNhbWUgbWF0Y2hpbmcgZm9udHMgY2FuIGdldCBzZXBhcmF0ZWQKICAgIHRlc3RTdHJpbmcgPSAibW1tbW1tbW1tbWxsaSI7CgogICAgLy93ZSB0ZXN0IHVzaW5nIDcycHggZm9udCBzaXplLCB3ZSBtYXkgdXNlIGFueSBzaXplLiBJIGd1ZXNzIGxhcmdlciB0aGUgYmV0dGVyLgogICAgdGVzdFNpemUgPSAnNzJweCc7CgogICAgaCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CgogICAgLy8gY3JlYXRlIGEgU1BBTiBpbiB0aGUgZG9jdW1lbnQgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3ZSB1c2UgdG8gdGVzdAogICAgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHMuc3R5bGUuZm9udFNpemUgPSB0ZXN0U2l6ZTsKICAgIHMuaW5uZXJIVE1MID0gdGVzdFN0cmluZzsKICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHQgd2lkdGggZm9yIHRoZSB0aHJlZSBiYXNlIGZvbnRzCiAgICAgICAgcy5zdHlsZS5mb250RmFtaWx5ID0gYmFzZUZvbnRzW2luZGV4XTsKICAgICAgICBoLmFwcGVuZENoaWxkKHMpOwogICAgICAgIGRlZmF1bHRXaWR0aFtiYXNlRm9udHNbaW5kZXhdXSA9IHMub2Zmc2V0V2lkdGg7IC8vd2lkdGggZm9yIHRoZSBkZWZhdWx0IGZvbnQKICAgICAgICBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dID0gcy5vZmZzZXRIZWlnaHQ7IC8vaGVpZ2h0IGZvciB0aGUgZGVmdWFsdCBmb250CiAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgIH0KCiAgICBkZXRlY3Rvci5kZXRlY3QgPSBmdW5jdGlvbihmb250KSB7CiAgICAgICAgdmFyIGRldGVjdGVkID0gZmFsc2UsIGluZGV4LCBtYXRjaGVkOwogICAgICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgICAgIHMuc3R5bGUuZm9udEZhbWlseSA9IGZvbnQgKyAnLCcgKyBiYXNlRm9udHNbaW5kZXhdOyAvLyBuYW1lIG9mIHRoZSBmb250IGFsb25nIHdpdGggdGhlIGJhc2UgZm9udCBmb3IgZmFsbGJhY2suCiAgICAgICAgICAgIGguYXBwZW5kQ2hpbGQocyk7CiAgICAgICAgICAgIG1hdGNoZWQgPSAocy5vZmZzZXRXaWR0aCAhPT0gZGVmYXVsdFdpZHRoW2Jhc2VGb250c1tpbmRleF1dIHx8IHMub2Zmc2V0SGVpZ2h0ICE9PSBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dKTsKICAgICAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgICAgICAgICAgZGV0ZWN0ZWQgPSBkZXRlY3RlZCB8fCBtYXRjaGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9OwoKICAgIHJldHVybiBkZXRlY3RvcjsKfSgpKTsKLyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAxNCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGNvbGxlY3RTY3JlZW5JbmZvID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzY3JlZW5JbmZvID0ge307CiAgICAgICAgaWYgKHNjcmVlbikgewogICAgICAgICAgICBpZiAoc2NyZWVuLndpZHRoKSB7CiAgICAgICAgICAgICAgICBzY3JlZW5JbmZvLnNjcmVlbldpZHRoID0gc2NyZWVuLndpZHRoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLmhlaWdodCkgewogICAgICAgICAgICAgICAgc2NyZWVuSW5mby5zY3JlZW5IZWlnaHQgPSBzY3JlZW4uaGVpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLnBpeGVsRGVwdGgpIHsKICAgICAgICAgICAgICAgIHNjcmVlbkluZm8uc2NyZWVuQ29sb3VyRGVwdGggPSBzY3JlZW4ucGl4ZWxEZXB0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3Qgc2NyZWVuIGluZm9ybWF0aW9uLiBzY3JlZW4gaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzY3JlZW5JbmZvOwogICAgfSwKICAgIGNvbGxlY3RUaW1lem9uZUluZm8gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHRpbWV6b25lSW5mbyA9ICB7fSwgb2Zmc2V0ID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwoKICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgIHRpbWV6b25lSW5mby50aW1lem9uZSA9IG9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbm5vdCBjb2xsZWN0IHRpbWV6b25lIGluZm9ybWF0aW9uLiB0aW1lem9uZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aW1lem9uZUluZm87CiAgICB9LAogICAgY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgaWYgKG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IucGx1Z2lucykgewogICAgICAgICAgICB2YXIgcGx1Z2luc0luZm8gPSB7fSwgaSwgcGx1Z2lucyA9IG5hdmlnYXRvci5wbHVnaW5zOwogICAgICAgICAgICBwbHVnaW5zSW5mby5pbnN0YWxsZWRQbHVnaW5zID0gIiI7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGx1Z2luc0luZm8uaW5zdGFsbGVkUGx1Z2lucyA9IHBsdWdpbnNJbmZvLmluc3RhbGxlZFBsdWdpbnMgKyBwbHVnaW5zW2ldLmZpbGVuYW1lICsgIjsiOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcGx1Z2luc0luZm87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBicm93c2VyIHBsdWdpbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLnBsdWdpbnMgaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9CgogICAgfSwKLy8gR2V0dGluZyBnZW9sb2NhdGlvbiB0YWtlcyBzb21lIHRpbWUgYW5kIGlzIGRvbmUgYXN5bmNocm9ub3VzbHksIGhlbmNlIG5lZWQgYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgb25jZSBnZW9sb2NhdGlvbiBpcyByZXRyaWV2ZWQuCiAgICBjb2xsZWN0R2VvbG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIGdlb2xvY2F0aW9uSW5mbyA9IHt9LAogICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgICAgICAgICAgZ2VvbG9jYXRpb25JbmZvLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7CiAgICAgICAgICAgICAgICBnZW9sb2NhdGlvbkluZm8ubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7CiAgICAgICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3QgZ2VvbG9jYXRpb24gaW5mb3JtYXRpb24uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgY2FsbGJhY2soZ2VvbG9jYXRpb25JbmZvKTsKICAgICAgICAgICAgfTsKICAgICAgICBpZiAobmF2aWdhdG9yICYmIG5hdmlnYXRvci5nZW9sb2NhdGlvbikgewogICAgICAgICAgICAvLyBOQjogSWYgdXNlciBjaG9vc2VzICdOb3Qgbm93JyBvbiBGaXJlZm94IG5laXRoZXIgY2FsbGJhY2sgZ2V0cyBjYWxsZWQKICAgICAgICAgICAgLy8gICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NTUzMwogICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBnZW9sb2NhdGlvbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgIH0KICAgIH0sCiAgICBjb2xsZWN0QnJvd3NlckZvbnRzSW5mbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZm9udHNJbmZvID0ge30sIGksIGZvbnRzTGlzdCA9IFsiY3Vyc2l2ZSIsIm1vbm9zcGFjZSIsInNlcmlmIiwic2Fucy1zZXJpZiIsImZhbnRhc3kiLCJkZWZhdWx0IiwiQXJpYWwiLCJBcmlhbCBCbGFjayIsCiAgICAgICAgICAgICJBcmlhbCBOYXJyb3ciLCJBcmlhbCBSb3VuZGVkIE1UIEJvbGQiLCJCb29rbWFuIE9sZCBTdHlsZSIsIkJyYWRsZXkgSGFuZCBJVEMiLCJDZW50dXJ5IiwiQ2VudHVyeSBHb3RoaWMiLAogICAgICAgICAgICAiQ29taWMgU2FucyBNUyIsIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkdlb3JnaWEiLCJHZW50aXVtIiwiSW1wYWN0IiwiS2luZyIsIkx1Y2lkYSBDb25zb2xlIiwiTGFsaXQiLAogICAgICAgICAgICAiTW9kZW5hIiwiTW9ub3R5cGUgQ29yc2l2YSIsIlBhcHlydXMiLCJUYWhvbWEiLCJUZVgiLCJUaW1lcyIsIlRpbWVzIE5ldyBSb21hbiIsIlRyZWJ1Y2hldCBNUyIsIlZlcmRhbmEiLAogICAgICAgICAgICAiVmVyb25hIl07CiAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gIiI7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBmb250c0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGZvbnREZXRlY3Rvci5kZXRlY3QoZm9udHNMaXN0W2ldKSkgewogICAgICAgICAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzICsgZm9udHNMaXN0W2ldICsgIjsiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb250c0luZm87CiAgICB9LAogICAgZGV2aWNlUHJpbnQgPSB7fTsKCmRldmljZVByaW50LnNjcmVlbiA9IGNvbGxlY3RTY3JlZW5JbmZvKCk7CmRldmljZVByaW50LnRpbWV6b25lID0gY29sbGVjdFRpbWV6b25lSW5mbygpOwpkZXZpY2VQcmludC5wbHVnaW5zID0gY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbygpOwpkZXZpY2VQcmludC5mb250cyA9IGNvbGxlY3RCcm93c2VyRm9udHNJbmZvKCk7CgppZiAobmF2aWdhdG9yLnVzZXJBZ2VudCkgewogICAgZGV2aWNlUHJpbnQudXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKfQppZiAobmF2aWdhdG9yLmFwcE5hbWUpIHsKICAgIGRldmljZVByaW50LmFwcE5hbWUgPSBuYXZpZ2F0b3IuYXBwTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcENvZGVOYW1lKSB7CiAgICBkZXZpY2VQcmludC5hcHBDb2RlTmFtZSA9IG5hdmlnYXRvci5hcHBDb2RlTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcFZlcnNpb24pIHsKICAgIGRldmljZVByaW50LmFwcFZlcnNpb24gPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbikgewogICAgZGV2aWNlUHJpbnQuYXBwTWlub3JWZXJzaW9uID0gbmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmJ1aWxkSUQpIHsKICAgIGRldmljZVByaW50LmJ1aWxkSUQgPSBuYXZpZ2F0b3IuYnVpbGRJRDsKfQppZiAobmF2aWdhdG9yLnBsYXRmb3JtKSB7CiAgICBkZXZpY2VQcmludC5wbGF0Zm9ybSA9IG5hdmlnYXRvci5wbGF0Zm9ybTsKfQppZiAobmF2aWdhdG9yLmNwdUNsYXNzKSB7CiAgICBkZXZpY2VQcmludC5jcHVDbGFzcyA9IG5hdmlnYXRvci5jcHVDbGFzczsKfQppZiAobmF2aWdhdG9yLm9zY3B1KSB7CiAgICBkZXZpY2VQcmludC5vc2NwdSA9IG5hdmlnYXRvci5vc2NwdTsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3QpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3QgPSBuYXZpZ2F0b3IucHJvZHVjdDsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3RTdWIpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3RTdWIgPSBuYXZpZ2F0b3IucHJvZHVjdFN1YjsKfQppZiAobmF2aWdhdG9yLnZlbmRvcikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yID0gbmF2aWdhdG9yLnZlbmRvcjsKfQppZiAobmF2aWdhdG9yLnZlbmRvclN1YikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yU3ViID0gbmF2aWdhdG9yLnZlbmRvclN1YjsKfQppZiAobmF2aWdhdG9yLmxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5sYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnVzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQudXNlckxhbmd1YWdlID0gbmF2aWdhdG9yLnVzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQuYnJvd3Nlckxhbmd1YWdlID0gbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5zeXN0ZW1MYW5ndWFnZSA9IG5hdmlnYXRvci5zeXN0ZW1MYW5ndWFnZTsKfQoKLy8gQXR0ZW1wdCB0byBjb2xsZWN0IGdlby1sb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIHRoaXMgd2l0aCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgovLyBPdGhlcndpc2UsIGlmIGdlby1sb2NhdGlvbiBmYWlscyBvciB0YWtlcyBsb25nZXIgdGhhbiAzMCBzZWNvbmRzLCBhdXRvLXN1Ym1pdCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgphdXRvU3VibWl0RGVsYXkgPSAzMDAwMDsKb3V0cHV0LnZhbHVlID0gSlNPTi5zdHJpbmdpZnkoZGV2aWNlUHJpbnQpOwpjb2xsZWN0R2VvbG9jYXRpb25JbmZvKGZ1bmN0aW9uKGdlb2xvY2F0aW9uSW5mbykgewogICAgZGV2aWNlUHJpbnQuZ2VvbG9jYXRpb24gPSBnZW9sb2NhdGlvbkluZm87CiAgICBvdXRwdXQudmFsdWUgPSBKU09OLnN0cmluZ2lmeShkZXZpY2VQcmludCk7CiAgICBzdWJtaXQoKTsKfSk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"name\":\"Apple Profile Normalization\",\"description\":\"Normalizes raw profile data from Apple\",\"script\":\"IlwiLypcXG4gKiBDb3B5cmlnaHQgMjAyMS0yMDIyIEZvcmdlUm9jayBBUy4gQWxsIFJpZ2h0cyBSZXNlcnZlZFxcbiAqXFxuICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy5cXG4gKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0XFxuICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuXFxuICpcXG4gKiBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eTpcXG4gKiB1c2VybmFtZSwgZ2l2ZW5OYW1lLCBmYW1pbHlOYW1lLCBlbWFpbC5cXG4gKlxcbiAqIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmVcXG4gKiBhcmJpdHJhcnkgY2hhcmFjdGVycyBmcm9tIHRoZSBVbml2ZXJzYWwgQ2hhcmFjdGVyIFNldCAoVUNTKS5cXG4gKiBBIHplcm8tbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmcgaXMgbm90IHBlcm1pdHRlZC5cXG4gKi9cXG5cXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGRcXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvblxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3RcXG5cXG5TdHJpbmcgZW1haWwgPSBcXFwiY2hhbmdlQG1lLmNvbVxcXCJcXG5TdHJpbmcgc3ViamVjdElkID0gcmF3UHJvZmlsZS5zdWJcXG5TdHJpbmcgZmlyc3ROYW1lID0gXFxcIiBcXFwiXFxuU3RyaW5nIGxhc3ROYW1lID0gXFxcIiBcXFwiXFxuU3RyaW5nIHVzZXJuYW1lID0gc3ViamVjdElkXFxuU3RyaW5nIG5hbWVcXG5cXG5pZiAocmF3UHJvZmlsZS5pc0RlZmluZWQoXFxcImVtYWlsXFxcIikgJiYgcmF3UHJvZmlsZS5lbWFpbC5pc05vdE51bGwoKSl7IC8vIFVzZXIgY2FuIGVsZWN0IHRvIG5vdCBzaGFyZSB0aGVpciBlbWFpbFxcbiAgICBlbWFpbCA9IHJhd1Byb2ZpbGUuZW1haWwuYXNTdHJpbmcoKVxcbiAgICB1c2VybmFtZSA9IGVtYWlsXFxufVxcbmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZChcXFwibmFtZVxcXCIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkge1xcbiAgICBpZiAocmF3UHJvZmlsZS5uYW1lLmlzRGVmaW5lZChcXFwiZmlyc3ROYW1lXFxcIikgJiYgcmF3UHJvZmlsZS5uYW1lLmZpcnN0TmFtZS5pc05vdE51bGwoKSkge1xcbiAgICAgICAgZmlyc3ROYW1lID0gcmF3UHJvZmlsZS5uYW1lLmZpcnN0TmFtZS5hc1N0cmluZygpXFxuICAgIH1cXG4gICAgaWYgKHJhd1Byb2ZpbGUubmFtZS5pc0RlZmluZWQoXFxcImxhc3ROYW1lXFxcIikgJiYgcmF3UHJvZmlsZS5uYW1lLmxhc3ROYW1lLmlzTm90TnVsbCgpKSB7XFxuICAgICAgICBsYXN0TmFtZSA9IHJhd1Byb2ZpbGUubmFtZS5sYXN0TmFtZS5hc1N0cmluZygpXFxuICAgIH1cXG59XFxuXFxubmFtZSA9IChmaXJzdE5hbWU/LnRyaW0oKSA/IGZpcnN0TmFtZSA6IFxcXCJcXFwiKSArIChsYXN0TmFtZT8udHJpbSgpID8gKChmaXJzdE5hbWU/LnRyaW0oKSA/IFxcXCIgXFxcIiA6IFxcXCJcXFwiKSArIGxhc3ROYW1lKSA6IFxcXCJcXFwiKVxcbm5hbWUgPSAgKCFuYW1lPy50cmltKCkpID8gXFxcIiBcXFwiIDogbmFtZVxcblxcbnJldHVybiBqc29uKG9iamVjdChcXG4gICAgICAgIGZpZWxkKFxcXCJpZFxcXCIsIHN1YmplY3RJZCksXFxuICAgICAgICBmaWVsZChcXFwiZGlzcGxheU5hbWVcXFwiLCBuYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJlbWFpbFxcXCIsIGVtYWlsKSxcXG4gICAgICAgIGZpZWxkKFxcXCJnaXZlbk5hbWVcXFwiLCBmaXJzdE5hbWUpLFxcbiAgICAgICAgZmllbGQoXFxcImZhbWlseU5hbWVcXFwiLCBsYXN0TmFtZSksXFxuICAgICAgICBmaWVsZChcXFwidXNlcm5hbWVcXFwiLCB1c2VybmFtZSkpKVwiXG4i\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":66,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.0,resource=1.1, resource=1.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:02 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 800, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.290Z", - "time": 113, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 113 - } - }, - { - "_id": "ff970dfeb341840f5c1eb684254d93d9", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2022, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services?_action=nextdescendents" - }, - "response": { - "bodySize": 148894, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 148894, - "text": "{\"result\":[{\"dynamic\":{\"maxIdleTime\":30,\"maxSessionTime\":120,\"quotaLimit\":2,\"maxCachingTime\":3},\"_id\":\"session\",\"_type\":{\"_id\":\"session\",\"name\":\"Session\",\"collection\":false}},{\"emailAddressAttribute\":\"mail\",\"transportType\":\"default-smtp\",\"emailRateLimitSeconds\":1,\"emailImplClassName\":\"org.forgerock.openam.services.email.MailServerImpl\",\"port\":465,\"message\":\"Test Message\",\"subject\":\"Test Subject\",\"sslState\":\"SSL\",\"from\":\"vscheuber@gmail.com\",\"_id\":\"email\",\"_type\":{\"_id\":\"email\",\"name\":\"Email Service\",\"collection\":false}},{\"assignedDashboard\":[],\"_id\":\"dashboard\",\"_type\":{\"_id\":\"dashboard\",\"name\":\"Dashboard\",\"collection\":false}},{\"userAliasEnabled\":false,\"connectionPoolMinimumSize\":1,\"maximumSearchResults\":100,\"policyHeartbeatTimeUnit\":\"SECONDS\",\"searchTimeout\":5,\"usersSearchAttribute\":\"uid\",\"policyHeartbeatInterval\":10,\"usersSearchScope\":\"SCOPE_SUB\",\"subjectsResultTTL\":10,\"checkIfResourceTypeExists\":true,\"connectionPoolMaximumSize\":10,\"sslEnabled\":{\"$bool\":\"&{am.stores.ssl.enabled}\"},\"bindDn\":\"&{am.stores.user.username}\",\"ldapServer\":[\"userstore-1.userstore:1389\",\"userstore-0.userstore:1389\",\"userstore-2.userstore:1389\"],\"mtlsEnabled\":false,\"bindPassword\":{\"$string\":\"&{am.stores.user.password}\"},\"realmSearchFilter\":\"(objectclass=sunismanagedorganization)\",\"usersSearchFilter\":\"(objectclass=inetorgperson)\",\"usersBaseDn\":\"ou=identities\",\"_id\":\"policyconfiguration\",\"_type\":{\"_id\":\"policyconfiguration\",\"name\":\"Policy Configuration\",\"collection\":false}},{\"treeMapping\":{\"forgottenUsername\":\"ForgottenUsername\",\"registration\":\"Registration\",\"resetPassword\":\"ResetPassword\",\"updatePassword\":\"UpdatePassword\"},\"enabled\":true,\"_id\":\"selfServiceTrees\",\"_type\":{\"_id\":\"selfServiceTrees\",\"name\":\"Self Service Trees\",\"collection\":false}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"GROOVY\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJPa3RhIHJhd1Byb2ZpbGU6ICIrcmF3UHJvZmlsZSkKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZS5kYXRhLnVybCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5wcmVmZXJyZWRfdXNlcm5hbWUpKSkK\",\"description\":\"Normalizes raw profile data from GitHub\",\"lastModifiedBy\":\"null\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"lastModifiedDate\":\"0\",\"name\":\"Okta Profile Normalization\",\"_id\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V2_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"Y29uc29sZS5sb2coYHBpOiAke3N5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3QudmFyLnBpIil9YCk7CmNvbnNvbGUubG9nKGBwaSBzZWNyZXQ6ICR7c3lzdGVtRW52LmdldFByb3BlcnR5KCJlc3YudGVzdC5zZWNyZXQucGkiKX1gKTsKY29uc29sZS5sb2coYHNwZWVkIG9mIGxpZ2h0OiAke3N5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3QudmFyaWFibGUubGlnaHQiKX1gKTsKY29uc29sZS5sb2coYGV1bGVyJ3MgbnVtYmVyOiAke3N5c3RlbUVudi5nZXRQcm9wZXJ0eSgiZXN2LnRlc3Quc2VjcmV0LmV1bGVyIil9YCk7CmNvbnNvbGUubG9nKGBBcmVhIG9mIGNpcmNsZSB3aXRoIHJhZGl1cyA3OiAkezcgKiA3ICogc3lzdGVtRW52LmdldFByb3BlcnR5KCJlc3YudGVzdC52YXIucGkiKX1gKTsKY29uc29sZS5sb2coYFZvbHVtZSBvZiBzcGhlcmUgd2l0aCByYWRpdXMgNzogJHs0ICogNyAqIDcgKiA3ICogc3lzdGVtRW52LmdldFByb3BlcnR5KCJlc3YudGVzdC5zZWNyZXQucGkiKSAvIDN9YCk7Cg==\",\"description\":\"Script that uses secrets and variables\",\"lastModifiedBy\":\"null\",\"context\":\"LIBRARY\",\"lastModifiedDate\":\"0\",\"name\":\"test-script-with-secrets-and-variables\",\"_id\":\"da7a96a8-7969-4dab-9c6e-a812938cc76d\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4yL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL1NBTUwySWRlbnRpdHlQcm92aWRlckFkYXB0ZXIuaHRtbAogKiBOb3RlIHRoYXQgdGhlIGluaXRpYWxpemUgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHNjcmlwdHMuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzLiBDaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXZhaWxhYmxlIHRvIGl0LgogKgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZwogKiAgICAgRW50aXR5IElEIGZvciB0aGUgaG9zdGVkIElEUAogKiByZWFsbSAtIFN0cmluZwogKiAgICAgUmVhbG0gb2YgdGhlIGhvc3RlZCBJRFAKICogaWRwQWRhcHRlclNjcmlwdEhlbHBlciAtIElkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEpCiAqICAgICBBbiBpbnN0YW5jZSBvZiBJZHBBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIHJlcXVlc3QgLSBIdHRwU2VydmxldFJlcXVlc3QgKDIpCiAqICAgICBTZXJ2bGV0IHJlcXVlc3Qgb2JqZWN0CiAqIHJlc3BvbnNlIC0gSHR0cFNlcnZsZXRSZXNwb25zZSAoMykKICogICAgIFNlcnZsZXQgcmVzcG9uc2Ugb2JqZWN0CiAqIGF1dGhuUmVxdWVzdCAtIEF1dGhuUmVxdWVzdCAoNCkKICogICAgIFRoZSBvcmlnaW5hbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHNlbnQgZnJvbSBTUAogKiByZXFJZCAtIFN0cmluZwogKiAgICAgVGhlIGlkIHRvIHVzZSBmb3IgY29udGludWF0aW9uIG9mIHByb2Nlc3NpbmcgaWYgdGhlIGFkYXB0ZXIgcmVkaXJlY3RzCiAqIHJlcyAtIFJlc3BvbnNlICg1KQogKiAgICAgVGhlIFNBTUwgUmVzcG9uc2UKICogc2Vzc2lvbiAtIFNTT1Rva2VuICg2KQogKiAgICAgVGhlIHNpbmdsZSBzaWduLW9uIHNlc3Npb24uIFRoZSByZWZlcmVuY2UgdHlwZSBvZiB0aGlzIGlzIE9iamVjdCBhbmQgd291bGQgbmVlZCB0byBiZSBjYXN0ZWQgdG8gU1NPVG9rZW4uCiAqIHJlbGF5U3RhdGUgLSBTdHJpbmcKICogICAgIFRoZSByZWxheVN0YXRlIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZWRpcmVjdAogKiBmYXVsdENvZGUgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBjb2RlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgU0FNTCByZXNwb25zZQogKiBmYXVsdERldGFpbCAtIFN0cmluZwogKiAgICAgdGhlIGZhdWx0IGRldGFpbCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogbG9nZ2VyIC0gTG9nZ2VyIGluc3RhbmNlCiAqICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLjxzY3JpcHQgbmFtZT4KICoKICogVGhyb3dzIFNBTUwyRXhjZXB0aW9uICg3KToKICogICAgIGZvciBhbnkgZXhjZXB0aW9ucyBvY2N1cnJpbmcgaW4gdGhlIGFkYXB0ZXIuIFRoZSBmZWRlcmF0aW9uIHByb2Nlc3Mgd2lsbCBjb250aW51ZQogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBpZHBBZGFwdGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL1Jlc3BvbnNlLmh0bWwuCiAqICg2KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjIvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvY29tbW9uL1NBTUwyRXhjZXB0aW9uLmh0bWwuCiAqLwoKLyoKICogVGVtcGxhdGUvZGVmYXVsdCBzY3JpcHQgZm9yIFNBTUwyIElEUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTaW5nbGVTaWduT24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNpbmdsZVNpZ25PbiIpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZUF1dGhlbnRpY2F0aW9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlQXV0aGVudGljYXRpb24gKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZUF1dGhlbnRpY2F0aW9uIik7CiAgICByZXR1cm4gdHJ1ZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZFJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgc2Vzc2lvbgogKiAgICAgcmVsYXlTdGF0ZQogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBoYXBwZW5lZCBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVTZW5kUmVzcG9uc2UgKCkgewogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IHByZVNlbmRSZXNwb25zZSIpOwogICAgICBsb2dnZXIuZXJyb3IoIkNoaWNhZ286IGF1dGhuUmVxdWVzdDogIithdXRoblJlcXVlc3QpOwogICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QoImh0dHBzOi8vaWRjLnNjaGV1YmVyLmlvL2FtL1hVSS8/cmVhbG09YWxwaGEmYXV0aEluZGV4VHlwZT1zZXJ2aWNlJmF1dGhJbmRleFZhbHVlPURpc3BhdGNoZXImRm9yY2VBdXRoPXRydWUmZ290bz0iK3JlbGF5U3RhdGUpOwogICAgcmV0dXJuIHRydWU7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpZ25SZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICByZXMKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2lnblJlc3BvbnNlICgpIHsKICAgICAgbG9nZ2VyLmVycm9yKCJDaGljYWdvOiBwcmVTaWduUmVzcG9uc2UiKTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2VuZEZhaWx1cmVSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGZhdWx0Q29kZQogKiAgICAgZmF1bHREZXRhaWwKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2VuZEZhaWx1cmVSZXNwb25zZSAoKSB7CiAgICAgIGxvZ2dlci5lcnJvcigiQ2hpY2FnbzogcHJlU2VuZEZhaWx1cmVSZXNwb25zZSIpOwp9Cg==\",\"description\":\"Always redirect browser pre-auth\",\"lastModifiedBy\":\"null\",\"context\":\"SAML2_IDP_ADAPTER\",\"lastModifiedDate\":\"0\",\"name\":\"Saml2 IDP Adapter Always Auth\",\"_id\":\"85523e71-2d77-4577-b078-6f9674cc54e2\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V2_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"Cm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"description\":\"Dummy\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Dummy\",\"_id\":\"4c963bb3-7084-43d0-bcdc-a47482cf1825\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"b2JqZWN0QXR0cmlidXRlcyA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpCnVzZXJOYW1lID0gb2JqZWN0QXR0cmlidXRlcy5nZXQoInVzZXJOYW1lIikKCmlmKHVzZXJOYW1lKXsKICAvL0Zvcm0gRmlsbAogIG9iamVjdEF0dHJpYnV0ZXMucHV0KCJtYWlsIiwgdXNlck5hbWUpCn0gZWxzZSB7CiAgLy9Tb2NpYWwKICBvYmplY3RBdHRyaWJ1dGVzLnB1dCgidXNlck5hbWUiLCBvYmplY3RBdHRyaWJ1dGVzLmdldCgibWFpbCIpKQp9CgoKc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwgb2JqZWN0QXR0cmlidXRlcyk7Ci8vc2hhcmVkU3RhdGUucHV0KCJ1c2VybmFtZSIsIG1haWwpCgpvdXRjb21lID0gInRydWUiOwo=\",\"description\":\"null\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"EmailAsUsername\",\"_id\":\"e5c302c8-f838-4698-87cc-d7225fc82454\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdsZXZlbCcgKyBsZXZlbCArICdWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzZXQgYXQgZWFjaCBsZXZlbCBvZiB0aGUgbmVzdGVkIGpvdXJuZXlzLiBJdCBjb250YWlucyBhbiBpbmRpY2F0b3IgaW4gd2hpY2ggbGV2ZWwgaXQgd2FzIHNldC4nKTsKfSgpKTsK\",\"description\":\"set per level shared state variable\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"level\",\"_id\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V2_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"Y29uc29sZS5sb2coImhpIHRoZXJlIik7Cg==\",\"description\":\"null\",\"lastModifiedBy\":\"null\",\"context\":\"LIBRARY\",\"lastModifiedDate\":\"0\",\"name\":\"My Other Example Library Script\",\"_id\":\"4e053815-adde-46ac-9fe2-d3ae93517c14\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykgfHwgc2NvcGVzLmNvbnRhaW5zKCdmcjppZGM6YW5hbHl0aWNzOionKSkgewogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBjb20uc3VuLmlkZW50aXR5LmlkbS5JZFR5cGUKICAgICk7CiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBpZGVudGl0eS5nZXRNZW1iZXJzaGlwcyhmci5JZFR5cGUuR1JPVVApLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkgewogICAgICBncm91cHMucHVzaChncm91cC5nZXRBdHRyaWJ1dGUoJ2NuJykudG9BcnJheSgpWzBdKTsKICAgIH0pOwogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfQp9KCkpOwo=\",\"description\":\"Used by endUserUIClient\",\"lastModifiedBy\":\"null\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"lastModifiedDate\":\"0\",\"name\":\"Alpha endUserUIClient OAuth2 Access Token Modification Script\",\"_id\":\"e232cff3-2460-47cd-80b2-36c86c0d0f06\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIHRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIKICogaW4gYSBzdGFuZGFyZCBmb3JtIGV4cGVjdGVkIGJ5IHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogcmF3UHJvZmlsZSAtIFRoZSBzb2NpYWwgaWRlbnRpdHkgcHJvdmlkZXIgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIuCiAqICAgICAgICAgICAgICBKc29uVmFsdWUgKDEpLgogKiBsb2dnZXIgLSBUaGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiByZWFsbSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqIHJlcXVlc3RIZWFkZXJzIC0gVHJlZU1hcCAoMikuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBoZWFkZXJzIGluIHRoZSBsb2dpbiByZXF1ZXN0OgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1yZXF1ZXN0SGVhZGVycy4KICogcmVxdWVzdFBhcmFtZXRlcnMgLSBUcmVlTWFwICgyKS4KICogICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgcGFyYW1ldGVycy4KICogc2VsZWN0ZWRJZHAgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgVGhlIHNvY2lhbCBpZGVudGl0eSBwcm92aWRlciBuYW1lLiBGb3IgZXhhbXBsZTogZ29vZ2xlLgogKiBzaGFyZWRTdGF0ZSAtIExpbmtlZEhhc2hNYXAgKDMpLgogKiAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgc3RhdGUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRyZWUgYW5kIGFsbG93cyBkYXRhIGV4Y2hhbmdlIGJldHdlZW4gdGhlIHN0YXRlbGVzcyBub2RlczoKICogICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoLW5vZGVzL2NvcmUtYWN0aW9uLmh0bWwjYWNjZXNzaW5nLXRyZWUtc3RhdGUuCiAqIHRyYW5zaWVudFN0YXRlIC0gTGlua2VkSGFzaE1hcCAoMykuCiAqICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBmb3Igc3RvcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhdCBtdXN0IG5vdCBsZWF2ZSB0aGUgc2VydmVyIHVuZW5jcnlwdGVkLAogKiAgICAgICAgICAgICAgICAgIGFuZCB0aGF0IG1heSBub3QgbmVlZCB0byBwZXJzaXN0IGJldHdlZW4gYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZHVyaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzZXNzaW9uOgogKiAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2F1dGgtbm9kZXMvY29yZS1hY3Rpb24uaHRtbCNhY2Nlc3NpbmctdHJlZS1zdGF0ZS4KICoKICogUmV0dXJuIC0gYSBKc29uVmFsdWUgKDEpLgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqCiAqICAgICAgICAgIFRoaXMgc2NyaXB0J3MgbGFzdCBzdGF0ZW1lbnQgc2hvdWxkIHJlc3VsdCBpbiBhIEpzb25WYWx1ZSAoMSkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqICAgICAgICAgIHsKICogICAgICAgICAgICAgIHsiZGlzcGxheU5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZW1haWwiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiZmFtaWx5TmFtZSI6ICJjb3JyZXNwb25kaW5nLXNvY2lhbC1pZGVudGl0eS1wcm92aWRlci12YWx1ZSJ9LAogKiAgICAgICAgICAgICAgeyJnaXZlbk5hbWUiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsiaWQiOiAiY29ycmVzcG9uZGluZy1zb2NpYWwtaWRlbnRpdHktcHJvdmlkZXItdmFsdWUifSwKICogICAgICAgICAgICAgIHsibG9jYWxlIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InBob3RvVXJsIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0sCiAqICAgICAgICAgICAgICB7InVzZXJuYW1lIjogImNvcnJlc3BvbmRpbmctc29jaWFsLWlkZW50aXR5LXByb3ZpZGVyLXZhbHVlIn0KICogICAgICAgICAgfQogKgogKiAgICAgICAgICBUaGUgY29uc3VtZXIgb2YgdGhpcyBkYXRhIGRlZmluZXMgd2hpY2gga2V5cyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIGFyZSBvcHRpb25hbC4KICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2NpYWwgUHJvdmlkZXIgSGFuZGxlciBOb2RlIGFuZCwKICogICAgICAgICAgdWx0aW1hdGVseSwgdGhlIG1hbmFnZWQgb2JqZWN0IGNyZWF0ZWQvdXBkYXRlZCB3aXRoIHRoaXMgZGF0YQogKiAgICAgICAgICB3aWxsIGV4cGVjdCBjZXJ0YWluIGtleXMgdG8gYmUgcG9wdWxhdGVkLgogKiAgICAgICAgICBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eToKICogICAgICAgICAgdXNlcm5hbWUsIGdpdmVuTmFtZSwgZmFtaWx5TmFtZSwgZW1haWwuCiAqCiAqICAgICAgICAgIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKICogICAgICAgICAgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgZnJvbSB0aGUgVW5pdmVyc2FsIENoYXJhY3RlciBTZXQgKFVDUykuCiAqICAgICAgICAgIEEgemVyby1sZW5ndGggY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgcGVybWl0dGVkLgogKgogKiAoMSkgSnNvblZhbHVlIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2pzb24vSnNvblZhbHVlLmh0bWwuCiAqICgyKSBUcmVlTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9UcmVlTWFwLmh0bWwuCiAqICgzKSBMaW5rZWRIYXNoTWFwIC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqLwoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQogICAgKTsKCiAgICB2YXIgbm9ybWFsaXplZFByb2ZpbGVEYXRhID0gZnJKYXZhLkpzb25WYWx1ZS5qc29uKGZySmF2YS5Kc29uVmFsdWUub2JqZWN0KCkpOwogIAogICAgICAvL2xvZ2dlci5tZXNzYWdlKCdTZWd1aW4gcmF3UHJvZmlsZTogJytyYXdQcm9maWxlKTsKCiAgICBub3JtYWxpemVkUHJvZmlsZURhdGEucHV0KCdpZCcsIHJhd1Byb2ZpbGUuZ2V0KCdzdWInKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2Rpc3BsYXlOYW1lJywgcmF3UHJvZmlsZS5nZXQoJ2dpdmVuTmFtZScpLmFzU3RyaW5nKCkgKyAnICcgKyByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2VtYWlsJywgcmF3UHJvZmlsZS5nZXQoJ21haWwnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2dpdmVuTmFtZScsIHJhd1Byb2ZpbGUuZ2V0KCdnaXZlbk5hbWUnKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ2ZhbWlseU5hbWUnLCByYXdQcm9maWxlLmdldCgnc24nKS5hc1N0cmluZygpKTsKICAgIG5vcm1hbGl6ZWRQcm9maWxlRGF0YS5wdXQoJ3VzZXJuYW1lJywgcmF3UHJvZmlsZS5nZXQoJ3VwbicpLmFzU3RyaW5nKCkpOwogICAgbm9ybWFsaXplZFByb2ZpbGVEYXRhLnB1dCgncm9sZXMnLCByYXdQcm9maWxlLmdldCgncm9sZXMnKS5hc1N0cmluZygpKTsKICAKICAgICAgLy9sb2dnZXIubWVzc2FnZSgnU2VndWluIG5vcm1hbGl6ZWRQcm9maWxlRGF0YTogJytub3JtYWxpemVkUHJvZmlsZURhdGEpOwoKICAgIHJldHVybiBub3JtYWxpemVkUHJvZmlsZURhdGE7Cn0oKSk7Cg==\",\"description\":\"Normalizes raw profile data from ADFS\",\"lastModifiedBy\":\"null\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"lastModifiedDate\":\"0\",\"name\":\"ADFS Profile Normalization (JS)\",\"_id\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyoKICogSW5hY3RpdmUgRGV2aWNlIE1hdGNoIFNjcmlwdAogKi8KCm91dGNvbWUgPSAidHJ1ZSI7Cg==\",\"description\":\"Inactive Device Match Script\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Inactive Device Match Script\",\"_id\":\"3bd13a46-61c4-4974-8efb-1700c80c64e3\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogbW9kZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb2xsZWN0IG1vZGUgaWYgbm90IGFscmVhZHkgc2V0IGFuZCBzZXQgb3V0Y29tZSB0byBtb2RlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSAnc2hhcmVkIGFuZCBsZXZlbCcKICogLSAnc2hhcmVkIG9ubHknCiAqIC0gJ2xldmVsIG9ubHknCiAqIC0gJ25vbmUnCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBtb2RlID0gbm9kZVN0YXRlLmdldCgnbW9kZScpOwogIGlmIChtb2RlKSB7CiAgICBvdXRjb21lID0gbW9kZS5hc1N0cmluZygpOwogICAgdmFyIGxldmVsID0gbm9kZVN0YXRlLmdldCgnbGV2ZWwnKS5hc0ludGVnZXIoKSArIDE7CiAgICBsb2dnZXIuZXJyb3IoJ21vZGU6IG1vZGU9JyArIG1vZGUuYXNTdHJpbmcoKSArICcsIGxldmVsPScgKyBsZXZlbCk7CiAgICBzaGFyZWRTdGF0ZS5wdXQoJ2xldmVsJywgbGV2ZWwpOwogIH0KICBlbHNlIHsKICAgIHZhciBjaG9pY2VzID0gWydzaGFyZWQgYW5kIGxldmVsJywgJ3NoYXJlZCBvbmx5JywgJ2xldmVsIG9ubHknLCAnbm9uZSddOwogIAogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBvcmcuZm9yZ2Vyb2NrLm9wZW5hbS5hdXRoLm5vZGUuYXBpLkFjdGlvbiwKICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DaG9pY2VDYWxsYmFjawogICAgKQoKICAgIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5zZW5kKFsKICAgICAgICBuZXcgZnIuQ2hvaWNlQ2FsbGJhY2soJ0Nob29zZSB0ZXN0IG1vZGUnLCBjaG9pY2VzLCAwLCBmYWxzZSkKICAgICAgXSkuYnVpbGQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBjaG9pY2UgPSBwYXJzZUludChjYWxsYmFja3MuZ2V0KDApLmdldFNlbGVjdGVkSW5kZXhlcygpWzBdKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgnbW9kZScsIGNob2ljZXNbY2hvaWNlXSk7CiAgICAgIG5vZGVTdGF0ZS5wdXRTaGFyZWQoJ2xldmVsJywgMCk7CiAgICAgIGFjdGlvbiA9IGZyLkFjdGlvbi5nb1RvKGNob2ljZXNbY2hvaWNlXSkuYnVpbGQoKTsKICAgIH0KICB9Cn0oKSk7Cg==\",\"description\":\"Check if mode has already been set.\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"mode\",\"_id\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOwo=\",\"description\":\"Check if username has already been collected.\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Check Username\",\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"description\":\"Default alpha realm script for OAuth2 Access Token Modification\",\"lastModifiedBy\":\"null\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"lastModifiedDate\":\"0\",\"name\":\"Alpha OAuth2 Access Token Modification Script\",\"_id\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"GROOVY\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmxvZ2dlci53YXJuaW5nKCJHaXRIdWIgcmF3UHJvZmlsZTogIityYXdQcm9maWxlKQoKcmV0dXJuIGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZmlyc3RfbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3RfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5waWN0dXJlLmRhdGEudXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLmVtYWlsKSkpCg==\",\"description\":\"Normalizes raw profile data from GitHub\",\"lastModifiedBy\":\"null\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"lastModifiedDate\":\"0\",\"name\":\"GitHub Profile Normalization (VS)\",\"_id\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"dmFyIHVzZXJuYW1lID0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpOwoKc2hhcmVkU3RhdGUucHV0KCJkaXNwbGF5TmFtZSIsIHVzZXJuYW1lKTsKb3V0Y29tZSA9ICJjb250aW51ZSI7Cg==\",\"description\":\"null\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Format Username\",\"_id\":\"223739f3-9c54-43b7-9572-3c5338786145\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwogIHZhciBsZXZlbCA9IG5vZGVTdGF0ZS5nZXQoJ2xldmVsJykuYXNJbnRlZ2VyKCk7CiAgc2hhcmVkU3RhdGUucHV0KCdzaGFyZWRWYWx1ZScsICdMZXZlbCAnICsgbGV2ZWwgKyAnOiBUaGlzIGlzIGEgbG9uZ2VyIHN0cmluZyB2YWx1ZSBzaGFyZWQgYWNyb3NzIGFsbCBuZXN0ZWQgam91cm5leXMuIEl0IGNvbnRhaW5zIGFuIGluZGljYXRvciBpbiB3aGljaCBsZXZlbCBpdCB3YXMgbGFzdCBzZXQuJyk7Cn0oKSk7Cg==\",\"description\":\"set the same shared state variable\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"shared\",\"_id\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7Cg==\",\"description\":\"Remove button from page.\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Remove Button\",\"_id\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V2_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyoqCiAqIFRlc3RpbmcgbGlicmFyeSBzY3JpcHRzCiAqLwp2YXIgbXlsaWIgPSByZXF1aXJlKCdNeSBFeGFtcGxlIExpYnJhcnknKTsKdmFyIGxvZ2dlcnMgPSByZXF1aXJlKCdMaWJyYXJ5IFNjcmlwdCcpOwoKbXlsaWIuYWRkKDEpOwpteWxpYi5sb2dUb3RhbChsb2dnZXIpOwpteWxpYi5hZGQoMyk7Cm15bGliLmxvZ1RvdGFsV2l0aE1lc3NhZ2UobG9nZ2VyLCBteWxpYi5NU0cpOwoKb3V0Y29tZSA9ICd0cnVlJzsK\",\"description\":\"My Example Script Using Libraries\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"My Example Script Using Libraries\",\"_id\":\"bb393d07-a121-47e2-9d24-1a1066f39ec0\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyoKICogQ3VzdG9tIERldmljZSBNYXRjaCBTY3JpcHQKICovCgpvdXRjb21lID0gInRydWUiOwo=\",\"description\":\"Custom Device Match Script\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Custom Device Match Script\",\"_id\":\"d58977ed-0542-4147-8197-973ef7300191\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0K\",\"description\":\"null\",\"lastModifiedBy\":\"null\",\"context\":\"SAML2_SP_ADAPTER\",\"lastModifiedDate\":\"0\",\"name\":\"FrodoSPAdapter\",\"_id\":\"07ee6240-d106-4e25-a781-5fcabc477d22\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V2_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"dmFyIGkgPSAwOwoKZnVuY3Rpb24gYWRkKGopIHtpICs9IGp9OwpmdW5jdGlvbiBsb2dUb3RhbChsb2cpIHsgbG9nLmluZm8oIlRvdGFsOiAiICsgaSkgfTsKCi8vIGV4cG9ydCBjb25zdGFudApleHBvcnRzLk1TRyA9ICdGaW5hbCBzdW0nOwoKLy8gZXhwb3J0IGZ1bmN0aW9ucwpleHBvcnRzLmFkZCA9IGFkZDsKZXhwb3J0cy5sb2dUb3RhbCA9IGxvZ1RvdGFsOwoKLy9kaXJlY3QgZXhwb3J0IHVzaW5nIGFuIGlubGluZSBkZWNsYXJhdGlvbgpleHBvcnRzLmxvZ1RvdGFsV2l0aE1lc3NhZ2UgPSAobG9nLCBtZXNzYWdlKSA9PiBsb2cuaW5mbyhtZXNzYWdlICsgIjogIiArIGkpOwo=\",\"description\":\"My Example Library\",\"lastModifiedBy\":\"null\",\"context\":\"LIBRARY\",\"lastModifiedDate\":\"0\",\"name\":\"My Example Library\",\"_id\":\"2c38c998-aec0-4e56-8d46-bff6e24a704e\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"description\":\"Default alpha realm script for OIDC claims\",\"lastModifiedBy\":\"null\",\"context\":\"OIDC_CLAIMS\",\"lastModifiedDate\":\"0\",\"name\":\"Alpha OIDC Claims Script\",\"_id\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"description\":\"Used by endUserUIClient\",\"lastModifiedBy\":\"null\",\"context\":\"OIDC_CLAIMS\",\"lastModifiedDate\":\"0\",\"name\":\"Alpha endUserUIClient OIDC Claims Script\",\"_id\":\"e1db8a0a-0329-4962-a5bf-ecffaca376ae\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogRGlzcGxheSBzaGFyZWRTdGF0ZSwgdHJhbnNpZW50U3RhdGUsIGFuZCBoZWFkZXJzLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwp2YXIgYW5jaG9yID0gImFuY2hvci0iLmNvbmNhdChnZW5lcmF0ZU51bWVyaWNUb2tlbigneHh4JykpOwp2YXIgaGFsaWduID0gImxlZnQiOwp2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBIZWFkZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgICAgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikKdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAiZnVuY3Rpb24gKGUpIHtcbiIpLmNvbmNhdCgKICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgIiAgaWYgKG1lc3NhZ2UuZmlyc3RDaGlsZCAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZU5hbWUgPT0gJyN0ZXh0JyAmJiBtZXNzYWdlLmZpcnN0Q2hpbGQubm9kZVZhbHVlLnRyaW0oKSA9PSAnIikuY29uY2F0KGFuY2hvcikuY29uY2F0KCInKSB7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICIgICAgbWVzc2FnZS5pbm5lckhUTUwgPSAnIikuY29uY2F0KG1lc3NhZ2UpLmNvbmNhdCgiJztcbiIpLmNvbmNhdCgKICAiICB9XG4iKS5jb25jYXQoCiAgIn0pIikKdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLlRleHRPdXRwdXRDYWxsYmFjaywKICAgIGNvbS5zdW4uaWRlbnRpdHkuYXV0aGVudGljYXRpb24uY2FsbGJhY2tzLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjawopCmlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICBuZXcgZnIuVGV4dE91dHB1dENhbGxiYWNrKAogICAgICAgICAgICBmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sCiAgICAgICAgICAgIGFuY2hvcgogICAgICAgICksCiAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICApLmJ1aWxkKCkKfQplbHNlIHsKICBhY3Rpb24gPSBmci5BY3Rpb24uZ29UbygidHJ1ZSIpLmJ1aWxkKCk7Cn0KCiAvKgogICogR2VuZXJhdGUgYSB0b2tlbiBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuIEFsbCAneCcgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSByYW5kb20gbnVtYmVyIDAtOS4KICAqIAogICogRXhhbXBsZToKICAqICd4eHh4eCcgcHJvZHVjZXMgJzI4NTM1JwogICogJ3h4eC14eHgnIHByb2R1Y2VzICc0MzItNTIxJwogICovCmZ1bmN0aW9uIGdlbmVyYXRlTnVtZXJpY1Rva2VuKGZvcm1hdCkgewogICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9beF0vZywgZnVuY3Rpb24oYykgewogICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxMHwwOwogICAgICAgIHZhciB2ID0gcjsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKfQo=\",\"description\":\"Display sharedState, transientState, and headers.\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"debug\",\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"enabled\":true,\"_id\":\"SocialIdentityProviders\",\"_type\":{\"_id\":\"SocialIdentityProviders\",\"name\":\"Social Identity Provider Service\",\"collection\":false}},{\"advancedOIDCConfig\":{\"supportedRequestParameterEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"authorisedOpenIdConnectSSOClients\":[],\"supportedUserInfoEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"supportedAuthorizationResponseEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"supportedTokenIntrospectionResponseEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"useForceAuthnForPromptLogin\":false,\"useForceAuthnForMaxAge\":false,\"alwaysAddClaimsToToken\":true,\"supportedTokenIntrospectionResponseSigningAlgorithms\":[\"PS384\",\"RS384\",\"EdDSA\",\"ES384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedTokenEndpointAuthenticationSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedRequestParameterSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"includeAllKtyAlgCombinationsInJwksUri\":false,\"amrMappings\":{},\"loaMapping\":{},\"authorisedIdmDelegationClients\":[],\"idTokenInfoClientAuthenticationEnabled\":true,\"storeOpsTokens\":true,\"supportedUserInfoSigningAlgorithms\":[\"ES384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\"],\"supportedAuthorizationResponseSigningAlgorithms\":[\"PS384\",\"RS384\",\"EdDSA\",\"ES384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedUserInfoEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"claimsParameterSupported\":false,\"supportedTokenIntrospectionResponseEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"supportedAuthorizationResponseEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"supportedRequestParameterEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"ECDH-ES+A128KW\",\"RSA-OAEP\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"defaultACR\":[]},\"advancedOAuth2Config\":{\"passwordGrantAuthService\":\"Login\",\"includeClientIdClaimInStatelessTokens\":true,\"tokenCompressionEnabled\":false,\"tokenEncryptionEnabled\":false,\"requirePushedAuthorizationRequests\":false,\"tlsCertificateBoundAccessTokensEnabled\":true,\"includeSubnameInTokenClaims\":true,\"defaultScopes\":[\"address\",\"phone\",\"openid\",\"profile\",\"email\"],\"moduleMessageEnabledInPasswordGrant\":false,\"allowClientCredentialsInTokenRequestQueryParameters\":true,\"supportedSubjectTypes\":[\"public\",\"pairwise\"],\"refreshTokenGracePeriod\":0,\"tlsClientCertificateHeaderFormat\":\"URLENCODED_PEM\",\"hashSalt\":\"&{am.oidc.client.subject.identifier.hash.salt}\",\"macaroonTokenFormat\":\"V2\",\"maxAgeOfRequestObjectNbfClaim\":0,\"tlsCertificateRevocationCheckingEnabled\":false,\"nbfClaimRequiredInRequestObject\":false,\"requestObjectProcessing\":\"OIDC\",\"maxDifferenceBetweenRequestObjectNbfAndExp\":0,\"responseTypeClasses\":[\"code|org.forgerock.oauth2.core.AuthorizationCodeResponseTypeHandler\",\"device_code|org.forgerock.oauth2.core.TokenResponseTypeHandler\",\"token|org.forgerock.oauth2.core.TokenResponseTypeHandler\",\"id_token|org.forgerock.openidconnect.IdTokenResponseTypeHandler\"],\"expClaimRequiredInRequestObject\":false,\"tokenValidatorClasses\":[\"urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.idtoken.OidcIdTokenValidator\",\"urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.OAuth2AccessTokenValidator\"],\"tokenSigningAlgorithm\":\"HS256\",\"codeVerifierEnforced\":\"false\",\"displayNameAttribute\":\"cn\",\"tokenExchangeClasses\":[\"urn:ietf:params:oauth:token-type:access_token=>urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.AccessTokenToAccessTokenExchanger\",\"urn:ietf:params:oauth:token-type:id_token=>urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.idtoken.IdTokenToIdTokenExchanger\",\"urn:ietf:params:oauth:token-type:access_token=>urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.AccessTokenToIdTokenExchanger\",\"urn:ietf:params:oauth:token-type:id_token=>urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.idtoken.IdTokenToAccessTokenExchanger\"],\"parRequestUriLifetime\":90,\"allowedAudienceValues\":[],\"persistentClaims\":[],\"supportedScopes\":[\"email|Your email address\",\"openid|\",\"address|Your postal address\",\"phone|Your telephone number(s)\",\"profile|Your personal information\",\"fr:idm:*\",\"am-introspect-all-tokens\"],\"authenticationAttributes\":[\"uid\"],\"grantTypes\":[\"implicit\",\"urn:ietf:params:oauth:grant-type:saml2-bearer\",\"refresh_token\",\"password\",\"client_credentials\",\"urn:ietf:params:oauth:grant-type:device_code\",\"authorization_code\",\"urn:openid:params:grant-type:ciba\",\"urn:ietf:params:oauth:grant-type:uma-ticket\",\"urn:ietf:params:oauth:grant-type:jwt-bearer\"]},\"clientDynamicRegistrationConfig\":{\"dynamicClientRegistrationScope\":\"dynamic_client_registration\",\"allowDynamicRegistration\":false,\"requiredSoftwareStatementAttestedAttributes\":[\"redirect_uris\"],\"dynamicClientRegistrationSoftwareStatementRequired\":false,\"generateRegistrationAccessTokens\":true},\"coreOIDCConfig\":{\"overrideableOIDCClaims\":[],\"oidcDiscoveryEndpointEnabled\":true,\"supportedIDTokenEncryptionMethods\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"supportedClaims\":[],\"supportedIDTokenSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedIDTokenEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"jwtTokenLifetime\":3600},\"coreOAuth2Config\":{\"refreshTokenLifetime\":604800,\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenMayActScript\":\"[Empty]\",\"accessTokenLifetime\":3600,\"macaroonTokensEnabled\":false,\"codeLifetime\":120,\"statelessTokensEnabled\":true,\"usePolicyEngineForScope\":false,\"issueRefreshToken\":true,\"oidcMayActScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true},\"consent\":{\"supportedRcsRequestSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedRcsResponseEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"ECDH-ES+A128KW\",\"RSA-OAEP\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"supportedRcsRequestEncryptionMethods\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"enableRemoteConsent\":false,\"supportedRcsRequestEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"clientsCanSkipConsent\":true,\"supportedRcsResponseSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedRcsResponseEncryptionMethods\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"]},\"deviceCodeConfig\":{\"deviceUserCodeLength\":8,\"deviceCodeLifetime\":300,\"deviceUserCodeCharacterSet\":\"234567ACDEFGHJKLMNPQRSTWXYZabcdefhijkmnopqrstwxyz\",\"devicePollInterval\":5},\"pluginsConfig\":{\"evaluateScopeClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"validateScopeScript\":\"[Empty]\",\"accessTokenEnricherClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"oidcClaimsPluginType\":\"SCRIPTED\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"authorizeEndpointDataProviderPluginType\":\"JAVA\",\"userCodeGeneratorClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultUserCodeGenerator\",\"evaluateScopeScript\":\"[Empty]\",\"oidcClaimsClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"evaluateScopePluginType\":\"JAVA\",\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"accessTokenModifierClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"accessTokenModificationScript\":\"39c08084-1238-43e8-857f-2e11005eac49\",\"validateScopePluginType\":\"JAVA\",\"accessTokenModificationPluginType\":\"SCRIPTED\",\"oidcClaimsScript\":\"cf3515f0-8278-4ee3-a530-1bad7424c416\",\"validateScopeClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\"},\"cibaConfig\":{\"cibaMinimumPollingInterval\":2,\"supportedCibaSigningAlgorithms\":[\"ES256\",\"PS256\"],\"cibaAuthReqIdLifetime\":600},\"_id\":\"oauth-oidc\",\"_type\":{\"_id\":\"oauth-oidc\",\"name\":\"OAuth2 Provider\",\"collection\":false}},{\"sunIdRepoAttributeCombiner\":\"com.iplanet.am.sdk.AttributeCombiner\",\"sunIdRepoAttributeValidator\":[\"class=com.sun.identity.idm.server.IdRepoAttributeValidatorImpl\",\"minimumPasswordLength=8\",\"usernameInvalidChars=*|(|)|&|!\"],\"_id\":\"id-repositories\",\"_type\":{\"_id\":\"id-repositories\",\"name\":\"sunIdentityRepositoryService\",\"collection\":false}},{\"enabled\":true,\"_id\":\"pingOneWorkerService\",\"_type\":{\"_id\":\"pingOneWorkerService\",\"name\":\"PingOne Worker Service\",\"collection\":false}},{\"source\":\"REQUEST_VALUES\",\"fixedValue\":\"https://&{fqdn}\",\"contextPath\":\"/am\",\"_id\":\"baseurl\",\"_type\":{\"_id\":\"baseurl\",\"name\":\"Base URL Source\",\"collection\":false}},{\"validGotoDestinations\":[\"&{am.server.protocol|https}://&{fqdn}/*?*\"],\"_id\":\"validation\",\"_type\":{\"_id\":\"validation\",\"name\":\"Validation Service\",\"collection\":false}},{\"applicationDataStoreId\":\"application-store\",\"policyDataStoreId\":\"policy-store\",\"_id\":\"DataStoreService\",\"_type\":{\"_id\":\"DataStoreService\",\"name\":\"External Data Stores\",\"collection\":false}}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:02 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 773, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.410Z", - "time": 471, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 471 - } - }, - { - "_id": "cb9d53c94ab6123b4a71939cdf2fbffb", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2005, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/session" - }, - "response": { - "bodySize": 176, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 176, - "text": "{\"_id\":\"\",\"_rev\":\"-548141557\",\"dynamic\":{\"maxIdleTime\":30,\"maxSessionTime\":120,\"quotaLimit\":2,\"maxCachingTime\":3},\"_type\":{\"_id\":\"session\",\"name\":\"Session\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-548141557\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "176" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:02 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.906Z", - "time": 93, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 93 - } - }, - { - "_id": "ffb02a205166972467db7fae2668fc40", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2030, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/session?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:02 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.915Z", - "time": 74, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 74 - } - }, - { - "_id": "5f3f55bea2d2e81bd74dc7e9cf60b01f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2003, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/email" - }, - "response": { - "bodySize": 365, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 365, - "text": "{\"_id\":\"\",\"_rev\":\"-439720564\",\"emailAddressAttribute\":\"mail\",\"transportType\":\"default-smtp\",\"emailRateLimitSeconds\":1,\"emailImplClassName\":\"org.forgerock.openam.services.email.MailServerImpl\",\"port\":465,\"message\":\"Test Message\",\"subject\":\"Test Subject\",\"sslState\":\"SSL\",\"from\":\"vscheuber@gmail.com\",\"_type\":{\"_id\":\"email\",\"name\":\"Email Service\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-439720564\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "365" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.917Z", - "time": 104, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 104 - } - }, - { - "_id": "6d0e663e5d643b743f49f7d6b11ccdf5", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2028, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/email?_action=nextdescendents" - }, - "response": { - "bodySize": 256, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 256, - "text": "{\"result\":[{\"emailImplClassName\":\"org.forgerock.openam.services.email.MailServerImpl\",\"port\":465,\"username\":\"vscheuber@gmail.com\",\"sslState\":\"SSL\",\"hostname\":\"smtp.gmail.com\",\"_id\":\"gmail\",\"_type\":{\"_id\":\"smtpTransports\",\"name\":\"SMTP\",\"collection\":true}}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "256" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 766, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.919Z", - "time": 112, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 112 - } - }, - { - "_id": "dc090a0a9d306de65e479e39433f039b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2007, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/dashboard" - }, - "response": { - "bodySize": 116, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 116, - "text": "{\"_id\":\"\",\"_rev\":\"6506753\",\"assignedDashboard\":[],\"_type\":{\"_id\":\"dashboard\",\"name\":\"Dashboard\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"6506753\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "116" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 783, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.921Z", - "time": 105, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 105 - } - }, - { - "_id": "212aafa0da3348d575bb204ec9d4d1a4", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2032, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/dashboard?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.923Z", - "time": 105, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 105 - } - }, - { - "_id": "cb40f28508f6fd52a09cdbffe3a185a0", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2017, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/policyconfiguration" - }, - "response": { - "bodySize": 837, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 837, - "text": "{\"_id\":\"\",\"_rev\":\"-1504612008\",\"userAliasEnabled\":false,\"connectionPoolMinimumSize\":1,\"maximumSearchResults\":100,\"policyHeartbeatTimeUnit\":\"SECONDS\",\"searchTimeout\":5,\"usersSearchAttribute\":\"uid\",\"policyHeartbeatInterval\":10,\"usersSearchScope\":\"SCOPE_SUB\",\"subjectsResultTTL\":10,\"checkIfResourceTypeExists\":true,\"connectionPoolMaximumSize\":10,\"sslEnabled\":{\"$bool\":\"&{am.stores.ssl.enabled}\"},\"bindDn\":\"&{am.stores.user.username}\",\"ldapServer\":[\"userstore-1.userstore:1389\",\"userstore-0.userstore:1389\",\"userstore-2.userstore:1389\"],\"mtlsEnabled\":false,\"bindPassword\":{\"$string\":\"&{am.stores.user.password}\"},\"realmSearchFilter\":\"(objectclass=sunismanagedorganization)\",\"usersSearchFilter\":\"(objectclass=inetorgperson)\",\"usersBaseDn\":\"ou=identities\",\"_type\":{\"_id\":\"policyconfiguration\",\"name\":\"Policy Configuration\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1504612008\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "837" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.924Z", - "time": 96, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 96 - } - }, - { - "_id": "ae7a3cffe6e808eff10be36e03517843", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2042, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/policyconfiguration?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.926Z", - "time": 88, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 88 - } - }, - { - "_id": "2bca54712a93e0259261f0c3640e5919", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2014, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/selfServiceTrees" - }, - "response": { - "bodySize": 279, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 279, - "text": "{\"_id\":\"\",\"_rev\":\"-948959244\",\"treeMapping\":{\"forgottenUsername\":\"ForgottenUsername\",\"registration\":\"Registration\",\"resetPassword\":\"ResetPassword\",\"updatePassword\":\"UpdatePassword\"},\"enabled\":true,\"_type\":{\"_id\":\"selfServiceTrees\",\"name\":\"Self Service Trees\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-948959244\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "279" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:02 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.928Z", - "time": 82, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 82 - } - }, - { - "_id": "9fbcfa836b3da36b89dc0a4e71fb0e9d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2039, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/selfServiceTrees?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.930Z", - "time": 87, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 87 - } - }, - { - "_id": "37d05209ca0f321311140872b78d072f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2021, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/SocialIdentityProviders" - }, - "response": { - "bodySize": 148, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 148, - "text": "{\"_id\":\"\",\"_rev\":\"1077208638\",\"enabled\":true,\"_type\":{\"_id\":\"SocialIdentityProviders\",\"name\":\"Social Identity Provider Service\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1077208638\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "148" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.932Z", - "time": 174, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 174 - } - }, - { - "_id": "34ae98ffe44dfb8099e54fa8ab143a36", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2046, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/SocialIdentityProviders?_action=nextdescendents" - }, - "response": { - "bodySize": 10076, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 10076, - "text": "{\"result\":[{\"clientId\":\"297338177925-mho17cgnm540s2gre8h27feb6sbs1msd.apps.googleusercontent.com\",\"pkceMethod\":\"S256\",\"wellKnownEndpoint\":\"https://accounts.google.com/.well-known/openid-configuration\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://accounts.google.com/o/oauth2/v2/auth\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"encryptJwtRequestParameter\":false,\"scopeDelimiter\":\" \",\"scopes\":[\"openid\",\"profile\",\"email\"],\"issuer\":\"https://accounts.google.com\",\"userInfoResponseType\":\"JSON\",\"acrValues\":[],\"encryptedIdTokens\":false,\"enabled\":true,\"jwtRequestParameterOption\":\"NONE\",\"authenticationIdKey\":\"sub\",\"uiConfig\":{\"buttonClass\":\"\",\"buttonCustomStyle\":\"background-color: #fff; color: #757575; border-color: #ddd;\",\"buttonCustomStyleHover\":\"color: #6d6d6d; background-color: #eee; border-color: #ccc;\",\"buttonDisplayName\":\"Google\",\"buttonImage\":\"images/g-logo.png\",\"iconBackground\":\"#4184f3\",\"iconClass\":\"fa-google\",\"iconFontColor\":\"white\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"enableNativeNonce\":true,\"transform\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"userInfoEndpoint\":\"https://www.googleapis.com/oauth2/v3/userinfo\",\"jwtSigningAlgorithm\":\"NONE\",\"redirectURI\":\"https://idc.scheuber.io/login\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"DEFAULT\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://www.googleapis.com/oauth2/v4/token\",\"_id\":\"google\",\"_type\":{\"_id\":\"googleConfig\",\"name\":\"Client configuration for Google.\",\"collection\":true}},{\"clientId\":\"bdae6d141d4dcf95a630\",\"pkceMethod\":\"S256\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://github.com/login/oauth/authorize\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"scopeDelimiter\":\" \",\"scopes\":[\"user\"],\"enabled\":true,\"authenticationIdKey\":\"id\",\"uiConfig\":{\"buttonCustomStyle\":\"background-color: #fff; color: #757575; border-color: #ddd;\",\"buttonCustomStyleHover\":\"color: #6d6d6d; background-color: #eee; border-color: #ccc;\",\"buttonDisplayName\":\"GitHub\",\"buttonImage\":\"https://cdn-icons-png.flaticon.com/512/25/25231.png\",\"iconBackground\":\"#4184f3\",\"iconFontColor\":\"white\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"transform\":\"23143919-6b78-40c3-b25e-beca19b229e0\",\"userInfoEndpoint\":\"https://ig.mytestrun.com/user\",\"jwtSigningAlgorithm\":\"NONE\",\"redirectURI\":\"https://idc.scheuber.io/login\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"DEFAULT\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://ig.mytestrun.com/login/oauth/access_token\",\"_id\":\"github\",\"_type\":{\"_id\":\"oauth2Config\",\"name\":\"Client configuration for providers that implement the OAuth2 specification.\",\"collection\":true}},{\"clientId\":\"CHANGE ME\",\"pkceMethod\":\"S256\",\"wellKnownEndpoint\":\"https://appleid.apple.com/.well-known/openid-configuration\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://appleid.apple.com/auth/authorize\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"encryptJwtRequestParameter\":false,\"scopeDelimiter\":\" \",\"scopes\":[\"name\",\"email\"],\"issuer\":\"https://appleid.apple.com\",\"redirectAfterFormPostURI\":\"https://openam-volker-dev.forgeblocks.com/login\",\"userInfoResponseType\":\"JSON\",\"acrValues\":[],\"jwksUriEndpoint\":\"https://appleid.apple.com/auth/keys\",\"encryptedIdTokens\":false,\"requestNativeAppForUserInfo\":false,\"enabled\":false,\"jwtRequestParameterOption\":\"NONE\",\"authenticationIdKey\":\"sub\",\"uiConfig\":{\"buttonClass\":\"\",\"buttonCustomStyle\":\"background-color: #000000; color: #ffffff; border-color: #000000;\",\"buttonCustomStyleHover\":\"background-color: #000000; color: #ffffff; border-color: #000000;\",\"buttonDisplayName\":\"Apple\",\"buttonImage\":\"/login/images/apple-logo.png\",\"iconBackground\":\"#000000\",\"iconClass\":\"fa-apple\",\"iconFontColor\":\"white\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"enableNativeNonce\":true,\"transform\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"jwtSigningAlgorithm\":\"NONE\",\"redirectURI\":\"https://openam-volker-dev.forgeblocks.com/am/oauth2/alpha/client/form_post/apple-stoyan\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"FORM_POST\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://appleid.apple.com/auth/token\",\"_id\":\"apple-stoyan\",\"_type\":{\"_id\":\"appleConfig\",\"name\":\"Client configuration for Apple.\",\"collection\":true}},{\"clientId\":\"io.scheuber.idc.signinWithApple.service\",\"pkceMethod\":\"S256\",\"wellKnownEndpoint\":\"https://appleid.apple.com/.well-known/openid-configuration\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://appleid.apple.com/auth/authorize\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"encryptJwtRequestParameter\":false,\"scopeDelimiter\":\" \",\"scopes\":[\"name\",\"email\"],\"issuer\":\"https://appleid.apple.com\",\"redirectAfterFormPostURI\":\"https://idc.scheuber.io/login\",\"userInfoResponseType\":\"JSON\",\"acrValues\":[],\"jwksUriEndpoint\":\"https://appleid.apple.com/auth/keys\",\"encryptedIdTokens\":false,\"requestNativeAppForUserInfo\":false,\"enabled\":true,\"jwtRequestParameterOption\":\"NONE\",\"authenticationIdKey\":\"sub\",\"uiConfig\":{\"buttonClass\":\"\",\"buttonCustomStyle\":\"background-color: #000000; color: #ffffff; border-color: #000000;\",\"buttonCustomStyleHover\":\"background-color: #000000; color: #ffffff; border-color: #000000;\",\"buttonDisplayName\":\"Apple\",\"buttonImage\":\"/login/images/apple-logo.png\",\"iconBackground\":\"#000000\",\"iconClass\":\"fa-apple\",\"iconFontColor\":\"white\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"enableNativeNonce\":true,\"transform\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"jwtSigningAlgorithm\":\"NONE\",\"redirectURI\":\"https://idc.scheuber.io/am/oauth2/client/form_post/apple_web\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"FORM_POST\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://appleid.apple.com/auth/token\",\"_id\":\"apple_web\",\"_type\":{\"_id\":\"appleConfig\",\"name\":\"Client configuration for Apple.\",\"collection\":true}},{\"clientId\":\"0oa13r2cp29Rynmyw697\",\"pkceMethod\":\"S256\",\"wellKnownEndpoint\":\"https://trial-5735851.okta.com/.well-known/openid-configuration\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://trial-5735851.okta.com/oauth2/v1/authorize\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"encryptJwtRequestParameter\":false,\"scopeDelimiter\":\" \",\"scopes\":[\"openid\",\"profile\",\"email\"],\"issuer\":\"https://trial-5735851.okta.com\",\"userInfoResponseType\":\"JSON\",\"acrValues\":[],\"encryptedIdTokens\":false,\"enabled\":true,\"jwtRequestParameterOption\":\"NONE\",\"authenticationIdKey\":\"id\",\"uiConfig\":{\"buttonDisplayName\":\"Okta\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"enableNativeNonce\":true,\"transform\":\"6325cf19-a49b-471e-8d26-7e4df76df0e2\",\"userInfoEndpoint\":\"https://trial-5735851.okta.com/oauth2/v1/userinfo\",\"jwtSigningAlgorithm\":\"NONE\",\"redirectURI\":\"https://idc.scheuber.io/login\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"DEFAULT\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://trial-5735851.okta.com/oauth2/v1/token\",\"_id\":\"okta-trial-5735851\",\"_type\":{\"_id\":\"oidcConfig\",\"name\":\"Client configuration for providers that implement the OpenID Connect specification.\",\"collection\":true}},{\"clientId\":\"aa9a179e-cdba-4db8-8477-3d1069d5ec04\",\"pkceMethod\":\"S256\",\"wellKnownEndpoint\":\"https://adfs.mytestrun.com/adfs/.well-known/openid-configuration\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://adfs.mytestrun.com/adfs/oauth2/authorize\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"encryptJwtRequestParameter\":false,\"scopeDelimiter\":\" \",\"scopes\":[\"openid\",\"profile\",\"email\"],\"issuer\":\"https://adfs.mytestrun.com/adfs\",\"userInfoResponseType\":\"JSON\",\"acrValues\":[],\"jwksUriEndpoint\":\"https://adfs.mytestrun.com/adfs/discovery/keys\",\"encryptedIdTokens\":false,\"enabled\":true,\"jwtRequestParameterOption\":\"NONE\",\"authenticationIdKey\":\"sub\",\"uiConfig\":{\"buttonClass\":\"\",\"buttonCustomStyle\":\"background-color: #fff; border-color: #8b8b8b; color: #8b8b8b;\",\"buttonCustomStyleHover\":\"background-color: #fff; border-color: #8b8b8b; color: #8b8b8b;\",\"buttonDisplayName\":\"Microsoft ADFS\",\"buttonImage\":\"/login/images/microsoft-logo.png\",\"iconBackground\":\"#0078d7\",\"iconClass\":\"fa-windows\",\"iconFontColor\":\"white\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"enableNativeNonce\":true,\"transform\":\"dbe0bf9a-72aa-49d5-8483-9db147985a47\",\"jwtSigningAlgorithm\":\"RS256\",\"redirectURI\":\"https://idc.scheuber.io/login\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"DEFAULT\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://adfs.mytestrun.com/adfs/oauth2/token\",\"_id\":\"adfs\",\"_type\":{\"_id\":\"oidcConfig\",\"name\":\"Client configuration for providers that implement the OpenID Connect specification.\",\"collection\":true}},{\"clientId\":\"c42a3dc8-f276-496b-a722-269f131cc21c\",\"pkceMethod\":\"S256\",\"jwtEncryptionMethod\":\"NONE\",\"authorizationEndpoint\":\"https://login.microsoftonline.com/711ffa9c-5972-4713-ace3-688c9732614a/oauth2/v2.0/authorize\",\"jwtEncryptionAlgorithm\":\"NONE\",\"issuerComparisonCheckType\":\"EXACT\",\"scopeDelimiter\":\" \",\"scopes\":[\"User.Read\",\"openid\"],\"enabled\":true,\"authenticationIdKey\":\"id\",\"uiConfig\":{\"buttonClass\":\"\",\"buttonCustomStyle\":\"background-color: #fff; border-color: #8b8b8b; color: #8b8b8b;\",\"buttonCustomStyleHover\":\"background-color: #fff; border-color: #8b8b8b; color: #8b8b8b;\",\"buttonDisplayName\":\"Microsoft Azure\",\"buttonImage\":\"/login/images/microsoft-logo.png\",\"iconBackground\":\"#0078d7\",\"iconClass\":\"fa-windows\",\"iconFontColor\":\"white\"},\"privateKeyJwtExpTime\":600,\"revocationCheckOptions\":[],\"transform\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"userInfoEndpoint\":\"https://graph.microsoft.com/v1.0/me\",\"jwtSigningAlgorithm\":\"NONE\",\"redirectURI\":\"https://idc.scheuber.io/login\",\"clientAuthenticationMethod\":\"CLIENT_SECRET_POST\",\"responseMode\":\"DEFAULT\",\"useCustomTrustStore\":false,\"tokenEndpoint\":\"https://login.microsoftonline.com/711ffa9c-5972-4713-ace3-688c9732614a/oauth2/v2.0/token\",\"_id\":\"azure\",\"_type\":{\"_id\":\"microsoftConfig\",\"name\":\"Client configuration for Microsoft.\",\"collection\":true}}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 773, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.941Z", - "time": 164, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 164 - } - }, - { - "_id": "09ce6ea5124194ad8f3ed9fa49a943d8", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/oauth-oidc?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.948Z", - "time": 164, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 164 - } - }, - { - "_id": "53dc4597d1233d73e1f8f96589fe6466", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2013, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/id-repositories" - }, - "response": { - "bodySize": 114, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 114, - "text": "{\"code\":403,\"reason\":\"Forbidden\",\"message\":\"This operation is not available in PingOne Advanced Identity Cloud.\"}" - }, - "cookies": [], - "headers": [ - { - "name": "cache-control", - "value": "private, no-store" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000;includeSubDomains;preload" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 292, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 403, - "statusText": "Forbidden" - }, - "startedDateTime": "2024-10-30T20:55:02.952Z", - "time": 108, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 108 - } - }, - { - "_id": "4730921b8dd87cc1919af34a8e592074", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2038, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/id-repositories?_action=nextdescendents" - }, - "response": { - "bodySize": 114, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 114, - "text": "{\"code\":403,\"reason\":\"Forbidden\",\"message\":\"This operation is not available in PingOne Advanced Identity Cloud.\"}" - }, - "cookies": [], - "headers": [ - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000;includeSubDomains;preload" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 283, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 403, - "statusText": "Forbidden" - }, - "startedDateTime": "2024-10-30T20:55:02.956Z", - "time": 103, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 103 - } - }, - { - "_id": "9047408bf8f77cb26a5f42cac73e3afb", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2018, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/pingOneWorkerService" - }, - "response": { - "bodySize": 135, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 135, - "text": "{\"_id\":\"\",\"_rev\":\"-945038405\",\"enabled\":true,\"_type\":{\"_id\":\"pingOneWorkerService\",\"name\":\"PingOne Worker Service\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-945038405\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "135" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.959Z", - "time": 159, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 159 - } - }, - { - "_id": "4ed2ab1ae5a50e4426587c980b7407d3", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2043, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/pingOneWorkerService?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.963Z", - "time": 156, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 156 - } - }, - { - "_id": "e892f50e58422cd6fce08ae62fbdf2d5", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2005, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/baseurl" - }, - "response": { - "bodySize": 178, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 178, - "text": "{\"_id\":\"\",\"_rev\":\"-1889820858\",\"source\":\"REQUEST_VALUES\",\"fixedValue\":\"https://&{fqdn}\",\"contextPath\":\"/am\",\"_type\":{\"_id\":\"baseurl\",\"name\":\"Base URL Source\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1889820858\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "178" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.966Z", - "time": 151, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 151 - } - }, - { - "_id": "feed0c0a76018e31ec3e975bcc6ca92b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2030, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/baseurl?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.969Z", - "time": 146, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 146 - } - }, - { - "_id": "52d371d12e93d9af202c94a5b6e77984", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2008, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/validation" - }, - "response": { - "bodySize": 175, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 175, - "text": "{\"_id\":\"\",\"_rev\":\"896681690\",\"validGotoDestinations\":[\"&{am.server.protocol|https}://&{fqdn}/*?*\"],\"_type\":{\"_id\":\"validation\",\"name\":\"Validation Service\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"896681690\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "175" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.971Z", - "time": 133, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 133 - } - }, - { - "_id": "5f42608ed714c980ecb9b78850e7df6a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/validation?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:02.974Z", - "time": 116, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 116 - } - }, - { - "_id": "62449e67e724df53edf3e66a080780a9", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2014, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/DataStoreService" - }, - "response": { - "bodySize": 114, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 114, - "text": "{\"code\":403,\"reason\":\"Forbidden\",\"message\":\"This operation is not available in PingOne Advanced Identity Cloud.\"}" - }, - "cookies": [], - "headers": [ - { - "name": "cache-control", - "value": "private, no-store" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000;includeSubDomains;preload" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 292, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 403, - "statusText": "Forbidden" - }, - "startedDateTime": "2024-10-30T20:55:02.977Z", - "time": 86, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 86 - } - }, - { - "_id": "72cb8da18938fe40e805356c48ac71e8", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2039, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/services/DataStoreService?_action=nextdescendents" - }, - "response": { - "bodySize": 114, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 114, - "text": "{\"code\":403,\"reason\":\"Forbidden\",\"message\":\"This operation is not available in PingOne Advanced Identity Cloud.\"}" - }, - "cookies": [], - "headers": [ - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000;includeSubDomains;preload" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 283, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 403, - "statusText": "Forbidden" - }, - "startedDateTime": "2024-10-30T20:55:02.980Z", - "time": 87, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 87 - } - }, - { - "_id": "1b5684afd52c9eaef24954b59c4a12b3", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2047, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees?_queryFilter=true" - }, - "response": { - "bodySize": 31869, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 31869, - "text": "{\"result\":[{\"_id\":\"ResetPassword\",\"_rev\":\"-501795106\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Password Reset\\\"]\"},\"entryNodeId\":\"cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b\",\"innerTreeOnly\":false,\"nodes\":{\"06c97be5-7fdd-4739-aea1-ecc7fe082865\":{\"connections\":{\"outcome\":\"e4c752f9-c625-48c9-9644-a58802fa9e9c\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":453,\"y\":66},\"21b8ddf3-0203-4ae1-ab05-51cf3a3a707a\":{\"connections\":{\"false\":\"06c97be5-7fdd-4739-aea1-ecc7fe082865\",\"true\":\"06c97be5-7fdd-4739-aea1-ecc7fe082865\"},\"displayName\":\"Identify Existing User\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":271,\"y\":21},\"989f0bf8-a328-4217-b82b-5275d79ca8bd\":{\"connections\":{\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"PATCHED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Patch Object\",\"nodeType\":\"PatchObjectNode\",\"x\":819,\"y\":61},\"cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b\":{\"connections\":{\"outcome\":\"21b8ddf3-0203-4ae1-ab05-51cf3a3a707a\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":103,\"y\":50},\"e4c752f9-c625-48c9-9644-a58802fa9e9c\":{\"connections\":{\"outcome\":\"989f0bf8-a328-4217-b82b-5275d79ca8bd\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":643,\"y\":50}},\"description\":\"Reset Password Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":970,\"y\":79},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":981,\"y\":147},\"startNode\":{\"x\":25,\"y\":25}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"OrphanedTest\",\"_rev\":\"-764260244\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"343e745f-923a-43c4-8675-649a490fd0a3\",\"innerTreeOnly\":false,\"nodes\":{\"343e745f-923a-43c4-8675-649a490fd0a3\":{\"connections\":{\"CANCELLED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"EXPIRED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"FALSE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"LOCKED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"TRUE\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Identity Store Decision\",\"nodeType\":\"IdentityStoreDecisionNode\",\"x\":407.046875,\"y\":190.015625}},\"description\":\"Test orphaned nodes\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":704,\"y\":129},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":707,\"y\":381},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"test\",\"_rev\":\"279923916\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{},\"entryNodeId\":\"d26176be-ea6f-4f2a-81cd-3d41dd6cee4d\",\"innerTreeOnly\":false,\"nodes\":{},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":50,\"y\":117},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":152,\"y\":25},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"ForgottenUsername\",\"_rev\":\"1703131230\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Username Reset\\\"]\"},\"entryNodeId\":\"5e2a7c95-94af-4b23-8724-deb13853726a\",\"innerTreeOnly\":false,\"nodes\":{\"5e2a7c95-94af-4b23-8724-deb13853726a\":{\"connections\":{\"outcome\":\"bf9ea8d5-9802-4f26-9664-a21840faac23\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":0,\"y\":0},\"b93ce36e-1976-4610-b24f-8d6760b5463b\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Inner Tree Evaluator\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":0,\"y\":0},\"bf9ea8d5-9802-4f26-9664-a21840faac23\":{\"connections\":{\"false\":\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\",\"true\":\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\"},\"displayName\":\"Identify Existing User\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":0,\"y\":0},\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\":{\"connections\":{\"outcome\":\"b93ce36e-1976-4610-b24f-8d6760b5463b\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":0,\"y\":0}},\"description\":\"Forgotten Username Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":970,\"y\":149},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":982,\"y\":252},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"j10\",\"_rev\":\"751431822\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"c91d626e-1156-41bd-b1fb-d292f640fba6\",\"innerTreeOnly\":false,\"nodes\":{\"300feda0-3248-49a9-b60f-01df802b2229\":{\"connections\":{\"true\":\"c7fcf7ae-1ab5-474b-b5b0-272e10468fbd\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"40afb384-e9b6-4dcb-acde-04de109474c8\":{\"connections\":{\"true\":\"c7fcf7ae-1ab5-474b-b5b0-272e10468fbd\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"8d7d64ee-da20-461f-a2ca-206b7479dd67\":{\"connections\":{\"true\":\"c7fcf7ae-1ab5-474b-b5b0-272e10468fbd\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"97ef9d96-99e7-4d2d-b6c6-4177b5397ead\":{\"connections\":{\"true\":\"8d7d64ee-da20-461f-a2ca-206b7479dd67\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"c7fcf7ae-1ab5-474b-b5b0-272e10468fbd\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":233.015625},\"c91d626e-1156-41bd-b1fb-d292f640fba6\":{\"connections\":{\"level only\":\"300feda0-3248-49a9-b60f-01df802b2229\",\"none\":\"c7fcf7ae-1ab5-474b-b5b0-272e10468fbd\",\"shared and level\":\"97ef9d96-99e7-4d2d-b6c6-4177b5397ead\",\"shared only\":\"40afb384-e9b6-4dcb-acde-04de109474c8\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"j01\",\"_rev\":\"-523887030\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"f129f0df-b49e-453b-97fb-db508e3893ce\",\"innerTreeOnly\":false,\"nodes\":{\"6674b4ac-dd89-4e13-9440-6f81194e3a22\":{\"connections\":{\"true\":\"bb1e96af-f316-4eb0-b1c6-36b3f1af9e35\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":0,\"y\":0},\"89ce5d57-82fa-4d58-8d15-0329f7dbd7e7\":{\"connections\":{\"true\":\"bdfbe97c-1ff4-4162-85bc-47f6f14b2c66\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":0,\"y\":0},\"bb1e96af-f316-4eb0-b1c6-36b3f1af9e35\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":0,\"y\":0},\"bdfbe97c-1ff4-4162-85bc-47f6f14b2c66\":{\"connections\":{\"true\":\"bb1e96af-f316-4eb0-b1c6-36b3f1af9e35\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":0,\"y\":0},\"e92d5139-b8a6-43dc-9b13-95ba1d0dc53c\":{\"connections\":{\"true\":\"bb1e96af-f316-4eb0-b1c6-36b3f1af9e35\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":0,\"y\":0},\"f129f0df-b49e-453b-97fb-db508e3893ce\":{\"connections\":{\"level only\":\"e92d5139-b8a6-43dc-9b13-95ba1d0dc53c\",\"none\":\"bb1e96af-f316-4eb0-b1c6-36b3f1af9e35\",\"shared and level\":\"89ce5d57-82fa-4d58-8d15-0329f7dbd7e7\",\"shared only\":\"6674b4ac-dd89-4e13-9440-6f81194e3a22\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":0,\"y\":0}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"UpdatePassword\",\"_rev\":\"-1067190791\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Password Reset\\\"]\"},\"entryNodeId\":\"d1b79744-493a-44fe-bc26-7d324a8caa4e\",\"innerTreeOnly\":false,\"nodes\":{\"0f0904e6-1da3-4cdb-9abf-0d2545016fab\":{\"connections\":{\"false\":\"a3d97b53-e38a-4b24-aed0-a021050eb744\",\"true\":\"20237b34-26cb-4a0b-958f-abb422290d42\"},\"displayName\":\"Attribute Present Decision\",\"nodeType\":\"AttributePresentDecisionNode\",\"x\":288,\"y\":133},\"20237b34-26cb-4a0b-958f-abb422290d42\":{\"connections\":{\"outcome\":\"7d1deabe-cd98-49c8-943f-ca12305775f3\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":526,\"y\":46},\"3990ce1f-cce6-435b-ae1c-f138e89411c1\":{\"connections\":{\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"PATCHED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Patch Object\",\"nodeType\":\"PatchObjectNode\",\"x\":1062,\"y\":189},\"7d1deabe-cd98-49c8-943f-ca12305775f3\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\"},\"displayName\":\"Data Store Decision\",\"nodeType\":\"DataStoreDecisionNode\",\"x\":722,\"y\":45},\"a3d97b53-e38a-4b24-aed0-a021050eb744\":{\"connections\":{\"outcome\":\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":659,\"y\":223},\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\":{\"connections\":{\"outcome\":\"3990ce1f-cce6-435b-ae1c-f138e89411c1\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":943,\"y\":30},\"d1b79744-493a-44fe-bc26-7d324a8caa4e\":{\"connections\":{\"outcome\":\"0f0904e6-1da3-4cdb-9abf-0d2545016fab\"},\"displayName\":\"Get Session Data\",\"nodeType\":\"SessionDataNode\",\"x\":122,\"y\":129}},\"description\":\"Update password using active session\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1212,\"y\":128},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":939,\"y\":290},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"j00\",\"_rev\":\"214130857\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"513a2ab4-f0b8-4f94-b840-6fe14796cc84\",\"innerTreeOnly\":false,\"nodes\":{\"01d3785f-7fb4-44a7-9458-72c380a9818f\":{\"connections\":{\"true\":\"3c1e8d61-0c48-44ba-86dc-52e9555b6aeb\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":348,\"y\":61},\"39b48197-f4be-42b9-800a-866587b4b9b5\":{\"connections\":{\"true\":\"ba503a1e-633e-4d0d-ba18-c9a9b1105b5b\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":365,\"y\":252},\"3c1e8d61-0c48-44ba-86dc-52e9555b6aeb\":{\"connections\":{\"true\":\"ba503a1e-633e-4d0d-ba18-c9a9b1105b5b\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":567,\"y\":64},\"513a2ab4-f0b8-4f94-b840-6fe14796cc84\":{\"connections\":{\"level only\":\"39b48197-f4be-42b9-800a-866587b4b9b5\",\"none\":\"ba503a1e-633e-4d0d-ba18-c9a9b1105b5b\",\"shared and level\":\"01d3785f-7fb4-44a7-9458-72c380a9818f\",\"shared only\":\"d17ffaa1-2c61-4abd-9bb1-2559160d0a5c\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":117,\"y\":117},\"ba503a1e-633e-4d0d-ba18-c9a9b1105b5b\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"debug\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":760,\"y\":137},\"d17ffaa1-2c61-4abd-9bb1-2559160d0a5c\":{\"connections\":{\"true\":\"ba503a1e-633e-4d0d-ba18-c9a9b1105b5b\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":338,\"y\":156}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":132,\"y\":364},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1000,\"y\":137},\"startNode\":{\"x\":0,\"y\":0}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"Login\",\"_rev\":\"-453684268\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Authentication\\\"]\"},\"entryNodeId\":\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\",\"innerTreeOnly\":false,\"nodes\":{\"2119f332-0f69-4088-a7a1-6582bf0f2001\":{\"connections\":{\"Reject\":\"51e8c4c1-3509-4635-90e6-d2cc31c4a6a5\",\"Retry\":\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\"},\"displayName\":\"Retry Limit Decision\",\"nodeType\":\"RetryLimitDecisionNode\",\"x\":612,\"y\":105.015625},\"33b24514-3e50-4180-8f08-ab6f4e51b07e\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Inner Tree Evaluator\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":827,\"y\":13},\"51e8c4c1-3509-4635-90e6-d2cc31c4a6a5\":{\"connections\":{\"outcome\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Account Lockout\",\"nodeType\":\"AccountLockoutNode\",\"x\":836,\"y\":184.015625},\"7f0c2aee-8c74-4d02-82a6-9d4ed9d11708\":{\"connections\":{\"CANCELLED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"EXPIRED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"FALSE\":\"2119f332-0f69-4088-a7a1-6582bf0f2001\",\"LOCKED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"TRUE\":\"bba3e0d8-8525-4e82-bf48-ac17f7988917\"},\"displayName\":\"Identity Store Decision\",\"nodeType\":\"IdentityStoreDecisionNode\",\"x\":352,\"y\":40.015625},\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\":{\"connections\":{\"outcome\":\"7f0c2aee-8c74-4d02-82a6-9d4ed9d11708\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":136,\"y\":59},\"bba3e0d8-8525-4e82-bf48-ac17f7988917\":{\"connections\":{\"outcome\":\"33b24514-3e50-4180-8f08-ab6f4e51b07e\"},\"displayName\":\"Increment Login Count\",\"nodeType\":\"IncrementLoginCountNode\",\"x\":579,\"y\":34}},\"description\":\"Platform Login Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1073,\"y\":30},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":761,\"y\":401},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"j03\",\"_rev\":\"-1352811052\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"e0cfbd13-6f1e-4924-9d2d-0f7c23507172\",\"innerTreeOnly\":false,\"nodes\":{\"35a4f94b-c895-46b9-bc0a-93cf59233759\":{\"connections\":{\"true\":\"bcb8c535-5ecd-4d3d-b970-26816de96bf2\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"3a92300d-6d64-451d-8156-30cb51781026\":{\"connections\":{\"true\":\"bcb8c535-5ecd-4d3d-b970-26816de96bf2\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"6f9de973-9ed4-41f5-b43d-4036041e2b96\":{\"connections\":{\"true\":\"3a92300d-6d64-451d-8156-30cb51781026\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"bcb8c535-5ecd-4d3d-b970-26816de96bf2\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":233.015625},\"e0cfbd13-6f1e-4924-9d2d-0f7c23507172\":{\"connections\":{\"level only\":\"35a4f94b-c895-46b9-bc0a-93cf59233759\",\"none\":\"bcb8c535-5ecd-4d3d-b970-26816de96bf2\",\"shared and level\":\"6f9de973-9ed4-41f5-b43d-4036041e2b96\",\"shared only\":\"fae7424e-13c9-45bd-b3a2-045773671a3f\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"fae7424e-13c9-45bd-b3a2-045773671a3f\":{\"connections\":{\"true\":\"bcb8c535-5ecd-4d3d-b970-26816de96bf2\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"j02\",\"_rev\":\"2029292005\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"59b06306-a886-443d-92df-7a27a60c394e\",\"innerTreeOnly\":false,\"nodes\":{\"2dbd2d37-c659-48cf-8357-c9fc1166e3a7\":{\"connections\":{\"true\":\"56899fef-92a1-4f2a-ade3-973c81eb3af1\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"4416aff7-3ebd-47e6-9831-c2f6bbe3ae24\":{\"connections\":{\"true\":\"56899fef-92a1-4f2a-ade3-973c81eb3af1\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"56899fef-92a1-4f2a-ade3-973c81eb3af1\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":233.015625},\"59b06306-a886-443d-92df-7a27a60c394e\":{\"connections\":{\"level only\":\"4416aff7-3ebd-47e6-9831-c2f6bbe3ae24\",\"none\":\"56899fef-92a1-4f2a-ade3-973c81eb3af1\",\"shared and level\":\"e0983ead-4918-48f6-858d-9aff0f03759c\",\"shared only\":\"cbb3d506-b267-4b99-9edd-363e90aac997\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"cbb3d506-b267-4b99-9edd-363e90aac997\":{\"connections\":{\"true\":\"56899fef-92a1-4f2a-ade3-973c81eb3af1\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"e0983ead-4918-48f6-858d-9aff0f03759c\":{\"connections\":{\"true\":\"2dbd2d37-c659-48cf-8357-c9fc1166e3a7\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"j05\",\"_rev\":\"1652057497\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"622179cb-98f1-484a-820d-9a0df6e45e95\",\"innerTreeOnly\":false,\"nodes\":{\"11f1c31c-50a9-4717-8213-420f6932481f\":{\"connections\":{\"true\":\"e90ae257-c279-46e0-9b43-5ecd89784d77\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"3c106772-ace7-4808-8f3a-9840de8f67f0\":{\"connections\":{\"true\":\"f17ecb7c-abc3-4523-9943-4cbdd90305cb\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"622179cb-98f1-484a-820d-9a0df6e45e95\":{\"connections\":{\"level only\":\"3c106772-ace7-4808-8f3a-9840de8f67f0\",\"none\":\"f17ecb7c-abc3-4523-9943-4cbdd90305cb\",\"shared and level\":\"11f1c31c-50a9-4717-8213-420f6932481f\",\"shared only\":\"a0782616-84b7-4bf5-87ed-a01fb3018563\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"a0782616-84b7-4bf5-87ed-a01fb3018563\":{\"connections\":{\"true\":\"f17ecb7c-abc3-4523-9943-4cbdd90305cb\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"e90ae257-c279-46e0-9b43-5ecd89784d77\":{\"connections\":{\"true\":\"f17ecb7c-abc3-4523-9943-4cbdd90305cb\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"f17ecb7c-abc3-4523-9943-4cbdd90305cb\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":232.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"j04\",\"_rev\":\"-1089876293\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"040b6c89-313b-4664-92e0-6732017384b8\",\"innerTreeOnly\":false,\"nodes\":{\"00e75aa0-2f9b-4895-9257-d515286fd64b\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":233.015625},\"040b6c89-313b-4664-92e0-6732017384b8\":{\"connections\":{\"level only\":\"d10104e9-1f8d-4da6-a110-28d879d13959\",\"none\":\"00e75aa0-2f9b-4895-9257-d515286fd64b\",\"shared and level\":\"f5c317ce-fabd-4a10-9907-c71cea037844\",\"shared only\":\"9603ef52-30f0-4ddc-b3c0-28dac83c7bdb\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"69ae8ec1-de43-44ac-98e5-733db80ac176\":{\"connections\":{\"true\":\"00e75aa0-2f9b-4895-9257-d515286fd64b\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"9603ef52-30f0-4ddc-b3c0-28dac83c7bdb\":{\"connections\":{\"true\":\"00e75aa0-2f9b-4895-9257-d515286fd64b\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"d10104e9-1f8d-4da6-a110-28d879d13959\":{\"connections\":{\"true\":\"00e75aa0-2f9b-4895-9257-d515286fd64b\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"f5c317ce-fabd-4a10-9907-c71cea037844\":{\"connections\":{\"true\":\"69ae8ec1-de43-44ac-98e5-733db80ac176\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"j07\",\"_rev\":\"-937100459\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"13b12fe6-cf53-46a4-a83d-0a3c1fda814f\",\"innerTreeOnly\":false,\"nodes\":{\"13b12fe6-cf53-46a4-a83d-0a3c1fda814f\":{\"connections\":{\"level only\":\"d90dd9f8-8b12-4e90-abaf-228ecc0174a7\",\"none\":\"e62d7a4d-2012-4a2a-a6ef-d6a0e0d552d9\",\"shared and level\":\"d9a06d3a-7e3f-4244-9a32-63ffa0d26e00\",\"shared only\":\"ac6ee166-73c0-4f73-b8db-4fe8ff6a25c0\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"ac6ee166-73c0-4f73-b8db-4fe8ff6a25c0\":{\"connections\":{\"true\":\"e62d7a4d-2012-4a2a-a6ef-d6a0e0d552d9\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"d90dd9f8-8b12-4e90-abaf-228ecc0174a7\":{\"connections\":{\"true\":\"e62d7a4d-2012-4a2a-a6ef-d6a0e0d552d9\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"d9a06d3a-7e3f-4244-9a32-63ffa0d26e00\":{\"connections\":{\"true\":\"f2fe740c-cd75-460a-8baa-fe4b52ecc947\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"e62d7a4d-2012-4a2a-a6ef-d6a0e0d552d9\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":232.015625},\"f2fe740c-cd75-460a-8baa-fe4b52ecc947\":{\"connections\":{\"true\":\"e62d7a4d-2012-4a2a-a6ef-d6a0e0d552d9\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"j06\",\"_rev\":\"605160891\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"44b8651c-7c1e-41f1-b9a6-2e441b0ce05a\",\"innerTreeOnly\":false,\"nodes\":{\"1d59caff-243c-45bd-b7d0-6dcc563989c5\":{\"connections\":{\"true\":\"2de08e9e-bf7b-4fa1-8265-59a8e4a3f7c3\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"2de08e9e-bf7b-4fa1-8265-59a8e4a3f7c3\":{\"connections\":{\"true\":\"409c251f-c23b-411d-9009-d3b3d26d1b90\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"409c251f-c23b-411d-9009-d3b3d26d1b90\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":232.015625},\"44b8651c-7c1e-41f1-b9a6-2e441b0ce05a\":{\"connections\":{\"level only\":\"fe8f27df-8a27-4d88-9196-834ce398b2b7\",\"none\":\"409c251f-c23b-411d-9009-d3b3d26d1b90\",\"shared and level\":\"1d59caff-243c-45bd-b7d0-6dcc563989c5\",\"shared only\":\"da878771-421c-463f-aad7-4d5f2ad5e59a\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"da878771-421c-463f-aad7-4d5f2ad5e59a\":{\"connections\":{\"true\":\"409c251f-c23b-411d-9009-d3b3d26d1b90\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"fe8f27df-8a27-4d88-9196-834ce398b2b7\":{\"connections\":{\"true\":\"409c251f-c23b-411d-9009-d3b3d26d1b90\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"j09\",\"_rev\":\"-1358707527\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"251f35c3-1a32-4520-be10-1f4af9600935\",\"innerTreeOnly\":false,\"nodes\":{\"251f35c3-1a32-4520-be10-1f4af9600935\":{\"connections\":{\"level only\":\"56b82371-0c61-4dc3-8d06-c1158415b8f9\",\"none\":\"6df24fdd-0b6c-4def-bf42-77af998f28b8\",\"shared and level\":\"8c5e9cb5-471b-4dd6-b150-ecaaeda98195\",\"shared only\":\"f57cf53c-b4c6-48f7-84e8-91f535a2e8f8\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"56b82371-0c61-4dc3-8d06-c1158415b8f9\":{\"connections\":{\"true\":\"6df24fdd-0b6c-4def-bf42-77af998f28b8\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"6df24fdd-0b6c-4def-bf42-77af998f28b8\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":233.015625},\"8c5e9cb5-471b-4dd6-b150-ecaaeda98195\":{\"connections\":{\"true\":\"bb294e05-6b6b-4478-b46f-b8d9e7711c66\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"bb294e05-6b6b-4478-b46f-b8d9e7711c66\":{\"connections\":{\"true\":\"6df24fdd-0b6c-4def-bf42-77af998f28b8\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"f57cf53c-b4c6-48f7-84e8-91f535a2e8f8\":{\"connections\":{\"true\":\"6df24fdd-0b6c-4def-bf42-77af998f28b8\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"j08\",\"_rev\":\"-1997695217\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"d429b2b5-b215-46a5-b239-4994df65cb8b\",\"innerTreeOnly\":false,\"nodes\":{\"042b600b-71cb-45a8-93ae-a6f57b16a6e5\":{\"connections\":{\"true\":\"87ced99b-bfa5-40d4-ba07-c8fc31f6cc6d\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"66026170-5088-4fcd-a6c8-ed89d7a5c79d\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":232.015625},\"8096649e-973e-4209-88ce-e1d87ae2bb96\":{\"connections\":{\"true\":\"66026170-5088-4fcd-a6c8-ed89d7a5c79d\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"87ced99b-bfa5-40d4-ba07-c8fc31f6cc6d\":{\"connections\":{\"true\":\"66026170-5088-4fcd-a6c8-ed89d7a5c79d\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"948e21f4-c512-450a-9d42-e0d629217834\":{\"connections\":{\"true\":\"66026170-5088-4fcd-a6c8-ed89d7a5c79d\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"d429b2b5-b215-46a5-b239-4994df65cb8b\":{\"connections\":{\"level only\":\"8096649e-973e-4209-88ce-e1d87ae2bb96\",\"none\":\"66026170-5088-4fcd-a6c8-ed89d7a5c79d\",\"shared and level\":\"042b600b-71cb-45a8-93ae-a6f57b16a6e5\",\"shared only\":\"948e21f4-c512-450a-9d42-e0d629217834\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"Registration\",\"_rev\":\"-340494482\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Registration\\\"]\"},\"entryNodeId\":\"0c091c49-f3af-48fb-ac6f-07fba0499dd6\",\"innerTreeOnly\":false,\"nodes\":{\"0c091c49-f3af-48fb-ac6f-07fba0499dd6\":{\"connections\":{\"outcome\":\"466f8b54-07fb-4e31-a11d-a6842618cc37\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":261,\"y\":168},\"466f8b54-07fb-4e31-a11d-a6842618cc37\":{\"connections\":{\"outcome\":\"ad5dcbb3-7335-49b7-b3e7-7d850bb88237\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":484,\"y\":267.015625},\"97a15eb2-a015-4b6d-81a0-be78c3aa1a3b\":{\"connections\":{\"outcome\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Increment Login Count\",\"nodeType\":\"IncrementLoginCountNode\",\"x\":861,\"y\":221},\"ad5dcbb3-7335-49b7-b3e7-7d850bb88237\":{\"connections\":{\"CREATED\":\"97a15eb2-a015-4b6d-81a0-be78c3aa1a3b\",\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Create Object\",\"nodeType\":\"CreateObjectNode\",\"x\":717,\"y\":283}},\"description\":\"Platform Registration Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1085,\"y\":248},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":921,\"y\":370},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"ProgressiveProfile\",\"_rev\":\"512701181\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Progressive Profile\\\"]\"},\"entryNodeId\":\"8afdaec3-275e-4301-bb53-34f03e6a4b29\",\"innerTreeOnly\":false,\"nodes\":{\"423a959a-a1b9-498a-b0f7-596b6b6e775a\":{\"connections\":{\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"PATCHED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Patch Object\",\"nodeType\":\"PatchObjectNode\",\"x\":766,\"y\":36},\"8afdaec3-275e-4301-bb53-34f03e6a4b29\":{\"connections\":{\"false\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"true\":\"a1f45b44-5bf7-4c57-aa3f-75c619c7db8e\"},\"displayName\":\"Login Count Decision\",\"nodeType\":\"LoginCountDecisionNode\",\"x\":152,\"y\":36},\"a1f45b44-5bf7-4c57-aa3f-75c619c7db8e\":{\"connections\":{\"false\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"true\":\"a5aecad8-854a-4ed5-b719-ff6c90e858c0\"},\"displayName\":\"Query Filter Decision\",\"nodeType\":\"QueryFilterDecisionNode\",\"x\":357,\"y\":36},\"a5aecad8-854a-4ed5-b719-ff6c90e858c0\":{\"connections\":{\"outcome\":\"423a959a-a1b9-498a-b0f7-596b6b6e775a\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":555,\"y\":20}},\"description\":\"Prompt for missing preferences on 3rd login\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":802,\"y\":312},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":919,\"y\":171},\"startNode\":{\"x\":50,\"y\":58.5}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"FrodoTest\",\"_rev\":\"1975823900\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Frodo\\\",\\\"Prototype\\\"]\"},\"entryNodeId\":\"e2c39477-847a-4df2-9c5d-b449a752638b\",\"innerTreeOnly\":false,\"nodes\":{\"278bf084-9eea-46fe-8ce9-2600dde3b046\":{\"connections\":{\"localAuthentication\":\"fc7e47cd-c679-4211-8e05-a36654f23c67\",\"socialAuthentication\":\"d5cc2d52-6ce4-452d-85ea-3a5b50218b67\"},\"displayName\":\"Login Page\",\"nodeType\":\"PageNode\",\"x\":444,\"y\":273.015625},\"64157fca-bd5b-4405-a4c8-64ffd98a5461\":{\"connections\":{\"ACCOUNT_EXISTS\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"NO_ACCOUNT\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"SAML2 Authentication\",\"nodeType\":\"product-Saml2Node\",\"x\":1196,\"y\":188.015625},\"731c5810-020b-45c8-a7fc-3c21903ae2b3\":{\"connections\":{\"localAuthentication\":\"fc7e47cd-c679-4211-8e05-a36654f23c67\",\"socialAuthentication\":\"d5cc2d52-6ce4-452d-85ea-3a5b50218b67\"},\"displayName\":\"Login Page\",\"nodeType\":\"PageNode\",\"x\":443,\"y\":26.015625},\"bf153f37-83dd-4f39-aa0c-74135430242e\":{\"connections\":{\"EMAIL_NOT_SENT\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"EMAIL_SENT\":\"64157fca-bd5b-4405-a4c8-64ffd98a5461\"},\"displayName\":\"Email Template Node\",\"nodeType\":\"EmailTemplateNode\",\"x\":967,\"y\":222.015625},\"d5cc2d52-6ce4-452d-85ea-3a5b50218b67\":{\"connections\":{\"ACCOUNT_EXISTS\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"NO_ACCOUNT\":\"bf153f37-83dd-4f39-aa0c-74135430242e\"},\"displayName\":\"Social Login\",\"nodeType\":\"SocialProviderHandlerNode\",\"x\":702,\"y\":116.015625},\"e2c39477-847a-4df2-9c5d-b449a752638b\":{\"connections\":{\"known\":\"731c5810-020b-45c8-a7fc-3c21903ae2b3\",\"unknown\":\"278bf084-9eea-46fe-8ce9-2600dde3b046\"},\"displayName\":\"Check Username\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":200,\"y\":235.015625},\"fc7e47cd-c679-4211-8e05-a36654f23c67\":{\"connections\":{\"CANCELLED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"EXPIRED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"FALSE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"LOCKED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"TRUE\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Validate Creds\",\"nodeType\":\"IdentityStoreDecisionNode\",\"x\":702,\"y\":292.015625}},\"description\":\"Frodo test journey utilizing a variety of nodes and dependencies to test support for complex journeys.\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1434,\"y\":60},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1433,\"y\":459},\"startNode\":{\"x\":63,\"y\":252}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"RadioChoice\",\"_rev\":\"947126104\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"5d6cd20e-5074-43de-8832-fddd95fb078e\",\"innerTreeOnly\":false,\"nodes\":{\"5d6cd20e-5074-43de-8832-fddd95fb078e\":{\"connections\":{\"one\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"three\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"two\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":260,\"y\":409.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":500,\"y\":50},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":744,\"y\":327},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}],\"resultCount\":21,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0, resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 800, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.220Z", - "time": 66, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 66 - } - }, - { - "_id": "79ce7bf61c3306390c211e1391e70945", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2047, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/ForgottenUsername" - }, - "response": { - "bodySize": 1273, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1273, - "text": "{\"_id\":\"ForgottenUsername\",\"_rev\":\"1703131230\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Username Reset\\\"]\"},\"entryNodeId\":\"5e2a7c95-94af-4b23-8724-deb13853726a\",\"innerTreeOnly\":false,\"nodes\":{\"5e2a7c95-94af-4b23-8724-deb13853726a\":{\"connections\":{\"outcome\":\"bf9ea8d5-9802-4f26-9664-a21840faac23\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":0,\"y\":0},\"b93ce36e-1976-4610-b24f-8d6760b5463b\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Inner Tree Evaluator\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":0,\"y\":0},\"bf9ea8d5-9802-4f26-9664-a21840faac23\":{\"connections\":{\"false\":\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\",\"true\":\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\"},\"displayName\":\"Identify Existing User\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":0,\"y\":0},\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\":{\"connections\":{\"outcome\":\"b93ce36e-1976-4610-b24f-8d6760b5463b\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":0,\"y\":0}},\"description\":\"Forgotten Username Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":970,\"y\":149},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":982,\"y\":252},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1703131230\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1273" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.292Z", - "time": 55, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 55 - } - }, - { - "_id": "a140c779b46a96e8b96bd695208ab9a1", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PageNode/5e2a7c95-94af-4b23-8724-deb13853726a" - }, - "response": { - "bodySize": 451, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 451, - "text": "{\"_id\":\"5e2a7c95-94af-4b23-8724-deb13853726a\",\"_rev\":\"-1421046051\",\"nodes\":[{\"_id\":\"9f1e8d94-4922-481b-9e14-212b66548900\",\"nodeType\":\"AttributeCollectorNode\",\"displayName\":\"Attribute Collector\"}],\"pageDescription\":{\"en\":\"Enter your email address or Sign in\"},\"pageHeader\":{\"en\":\"Forgotten Username\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1421046051\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "451" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.353Z", - "time": 207, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 207 - } - }, - { - "_id": "1251b1ea8d61c89e4b6e88a57415bd41", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/b93ce36e-1976-4610-b24f-8d6760b5463b" - }, - "response": { - "bodySize": 256, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 256, - "text": "{\"_id\":\"b93ce36e-1976-4610-b24f-8d6760b5463b\",\"_rev\":\"1389809903\",\"tree\":\"Login\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1389809903\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "256" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.354Z", - "time": 230, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 230 - } - }, - { - "_id": "f1b9a070e2f9d1fdb81fce2dbe27e6e5", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2091, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/IdentifyExistingUserNode/bf9ea8d5-9802-4f26-9664-a21840faac23" - }, - "response": { - "bodySize": 296, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 296, - "text": "{\"_id\":\"bf9ea8d5-9802-4f26-9664-a21840faac23\",\"_rev\":\"-626658673\",\"identityAttribute\":\"mail\",\"identifier\":\"userName\",\"_type\":{\"_id\":\"IdentifyExistingUserNode\",\"name\":\"Identify Existing User\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-626658673\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "296" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.355Z", - "time": 91, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 91 - } - }, - { - "_id": "7b265ac7b54675b92f96edc442d0dac6", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2083, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/EmailSuspendNode/d9a79f01-2ce3-4be2-a28a-975f35c3c8ca" - }, - "response": { - "bodySize": 436, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 436, - "text": "{\"_id\":\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\",\"_rev\":\"2035832000\",\"emailSuspendMessage\":{\"en\":\"An email has been sent to the address you entered. Click the link in that email to proceed.\"},\"emailTemplateName\":\"forgottenUsername\",\"identityAttribute\":\"mail\",\"emailAttribute\":\"mail\",\"objectLookup\":true,\"_type\":{\"_id\":\"EmailSuspendNode\",\"name\":\"Email Suspend Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"2035832000\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "436" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.357Z", - "time": 120, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 120 - } - }, - { - "_id": "bda3b29fd0248e8d22ba58014fdb90fc", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/AttributeCollectorNode/9f1e8d94-4922-481b-9e14-212b66548900" - }, - "response": { - "bodySize": 307, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 307, - "text": "{\"_id\":\"9f1e8d94-4922-481b-9e14-212b66548900\",\"_rev\":\"-1331445210\",\"attributesToCollect\":[\"mail\"],\"identityAttribute\":\"mail\",\"validateInputs\":false,\"required\":true,\"_type\":{\"_id\":\"AttributeCollectorNode\",\"name\":\"Attribute Collector\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1331445210\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "307" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.589Z", - "time": 127, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 127 - } - }, - { - "_id": "ac1c052857c268994601ecd6e2d2fea1", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2039, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/FrodoTest" - }, - "response": { - "bodySize": 2431, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 2431, - "text": "{\"_id\":\"FrodoTest\",\"_rev\":\"1975823900\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Frodo\\\",\\\"Prototype\\\"]\"},\"entryNodeId\":\"e2c39477-847a-4df2-9c5d-b449a752638b\",\"innerTreeOnly\":false,\"nodes\":{\"278bf084-9eea-46fe-8ce9-2600dde3b046\":{\"connections\":{\"localAuthentication\":\"fc7e47cd-c679-4211-8e05-a36654f23c67\",\"socialAuthentication\":\"d5cc2d52-6ce4-452d-85ea-3a5b50218b67\"},\"displayName\":\"Login Page\",\"nodeType\":\"PageNode\",\"x\":444,\"y\":273.015625},\"64157fca-bd5b-4405-a4c8-64ffd98a5461\":{\"connections\":{\"ACCOUNT_EXISTS\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"NO_ACCOUNT\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"SAML2 Authentication\",\"nodeType\":\"product-Saml2Node\",\"x\":1196,\"y\":188.015625},\"731c5810-020b-45c8-a7fc-3c21903ae2b3\":{\"connections\":{\"localAuthentication\":\"fc7e47cd-c679-4211-8e05-a36654f23c67\",\"socialAuthentication\":\"d5cc2d52-6ce4-452d-85ea-3a5b50218b67\"},\"displayName\":\"Login Page\",\"nodeType\":\"PageNode\",\"x\":443,\"y\":26.015625},\"bf153f37-83dd-4f39-aa0c-74135430242e\":{\"connections\":{\"EMAIL_NOT_SENT\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"EMAIL_SENT\":\"64157fca-bd5b-4405-a4c8-64ffd98a5461\"},\"displayName\":\"Email Template Node\",\"nodeType\":\"EmailTemplateNode\",\"x\":967,\"y\":222.015625},\"d5cc2d52-6ce4-452d-85ea-3a5b50218b67\":{\"connections\":{\"ACCOUNT_EXISTS\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"NO_ACCOUNT\":\"bf153f37-83dd-4f39-aa0c-74135430242e\"},\"displayName\":\"Social Login\",\"nodeType\":\"SocialProviderHandlerNode\",\"x\":702,\"y\":116.015625},\"e2c39477-847a-4df2-9c5d-b449a752638b\":{\"connections\":{\"known\":\"731c5810-020b-45c8-a7fc-3c21903ae2b3\",\"unknown\":\"278bf084-9eea-46fe-8ce9-2600dde3b046\"},\"displayName\":\"Check Username\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":200,\"y\":235.015625},\"fc7e47cd-c679-4211-8e05-a36654f23c67\":{\"connections\":{\"CANCELLED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"EXPIRED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"FALSE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"LOCKED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"TRUE\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Validate Creds\",\"nodeType\":\"IdentityStoreDecisionNode\",\"x\":702,\"y\":292.015625}},\"description\":\"Frodo test journey utilizing a variety of nodes and dependencies to test support for complex journeys.\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1434,\"y\":60},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1433,\"y\":459},\"startNode\":{\"x\":63,\"y\":252}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1975823900\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "2431" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.722Z", - "time": 62, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 62 - } - }, - { - "_id": "c1a0b933c2b6ced207e800afe0b180be", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PageNode/278bf084-9eea-46fe-8ce9-2600dde3b046" - }, - "response": { - "bodySize": 641, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 641, - "text": "{\"_id\":\"278bf084-9eea-46fe-8ce9-2600dde3b046\",\"_rev\":\"-1455503261\",\"nodes\":[{\"_id\":\"7a351800-fb7e-4145-903c-388554747556\",\"nodeType\":\"ValidatedUsernameNode\",\"displayName\":\"Username\"},{\"_id\":\"804e6a68-1720-442b-926a-007e90f02782\",\"nodeType\":\"ValidatedPasswordNode\",\"displayName\":\"Password\"},{\"_id\":\"228a44d5-fd78-4278-8999-fdd470ea7ebf\",\"nodeType\":\"SelectIdPNode\",\"displayName\":\"Select IDP\"}],\"pageDescription\":{},\"pageHeader\":{},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"socialAuthentication\",\"displayName\":\"Social Authentication\"},{\"id\":\"localAuthentication\",\"displayName\":\"Local Authentication\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1455503261\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "641" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.792Z", - "time": 97, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 97 - } - }, - { - "_id": "59a0df935d3bca8bae5a0847dcfc291d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2084, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/product-Saml2Node/64157fca-bd5b-4405-a4c8-64ffd98a5461" - }, - "response": { - "bodySize": 612, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 612, - "text": "{\"_id\":\"64157fca-bd5b-4405-a4c8-64ffd98a5461\",\"_rev\":\"370099639\",\"metaAlias\":\"/alpha/iSPAzure\",\"allowCreate\":true,\"authnContextClassRef\":[],\"authnContextDeclRef\":[],\"authComparison\":\"MINIMUM\",\"nameIdFormat\":\"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\",\"requestBinding\":\"HTTP_REDIRECT\",\"binding\":\"HTTP_ARTIFACT\",\"forceAuthn\":false,\"idpEntityId\":\"urn:federation:MicrosoftOnline\",\"isPassive\":false,\"_type\":{\"_id\":\"product-Saml2Node\",\"name\":\"SAML2 Authentication\",\"collection\":true},\"_outcomes\":[{\"id\":\"ACCOUNT_EXISTS\",\"displayName\":\"Account exists\"},{\"id\":\"NO_ACCOUNT\",\"displayName\":\"No account exists\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"370099639\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "612" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.793Z", - "time": 134, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 134 - } - }, - { - "_id": "55ca5a2239f0c6011f8ab56bda2f95ed", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PageNode/731c5810-020b-45c8-a7fc-3c21903ae2b3" - }, - "response": { - "bodySize": 533, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 533, - "text": "{\"_id\":\"731c5810-020b-45c8-a7fc-3c21903ae2b3\",\"_rev\":\"1250582707\",\"nodes\":[{\"_id\":\"dd16c8d4-baca-4ae0-bcd8-fb98b9040524\",\"nodeType\":\"ValidatedPasswordNode\",\"displayName\":\"Password\"},{\"_id\":\"038f9b2a-36b2-489b-9e03-386c9a62ea21\",\"nodeType\":\"SelectIdPNode\",\"displayName\":\"Select IDP\"}],\"pageDescription\":{},\"pageHeader\":{},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"socialAuthentication\",\"displayName\":\"Social Authentication\"},{\"id\":\"localAuthentication\",\"displayName\":\"Local Authentication\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1250582707\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "533" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.794Z", - "time": 100, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 100 - } - }, - { - "_id": "832b79bee665555829d06fd23f59722e", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2084, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/EmailTemplateNode/bf153f37-83dd-4f39-aa0c-74135430242e" - }, - "response": { - "bodySize": 349, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 349, - "text": "{\"_id\":\"bf153f37-83dd-4f39-aa0c-74135430242e\",\"_rev\":\"707624425\",\"emailTemplateName\":\"welcome\",\"identityAttribute\":\"userName\",\"emailAttribute\":\"mail\",\"_type\":{\"_id\":\"EmailTemplateNode\",\"name\":\"Email Template Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"EMAIL_SENT\",\"displayName\":\"Email Sent\"},{\"id\":\"EMAIL_NOT_SENT\",\"displayName\":\"Email Not Sent\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"707624425\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "349" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.795Z", - "time": 131, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 131 - } - }, - { - "_id": "d36096fa184fa415f712eff7c5e01891", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2092, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/SocialProviderHandlerNode/d5cc2d52-6ce4-452d-85ea-3a5b50218b67" - }, - "response": { - "bodySize": 395, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 395, - "text": "{\"_id\":\"d5cc2d52-6ce4-452d-85ea-3a5b50218b67\",\"_rev\":\"60612304\",\"clientType\":\"BROWSER\",\"script\":\"58c824ae-84ed-4724-82cd-db128fc3f6c\",\"usernameAttribute\":\"userName\",\"_type\":{\"_id\":\"SocialProviderHandlerNode\",\"name\":\"Legacy Social Provider Handler Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"ACCOUNT_EXISTS\",\"displayName\":\"Account exists\"},{\"id\":\"NO_ACCOUNT\",\"displayName\":\"No account exists\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"60612304\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "395" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 784, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.796Z", - "time": 128, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 128 - } - }, - { - "_id": "b0673d4f2a9f659cf50fea6b776532c6", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/e2c39477-847a-4df2-9c5d-b449a752638b" - }, - "response": { - "bodySize": 352, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 352, - "text": "{\"_id\":\"e2c39477-847a-4df2-9c5d-b449a752638b\",\"_rev\":\"-495106283\",\"script\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"outcomes\":[\"known\",\"unknown\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"known\",\"displayName\":\"known\"},{\"id\":\"unknown\",\"displayName\":\"unknown\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-495106283\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "352" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:04 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.797Z", - "time": 983, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 983 - } - }, - { - "_id": "735b3118477d924e1cd82292f024b466", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2092, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/IdentityStoreDecisionNode/fc7e47cd-c679-4211-8e05-a36654f23c67" - }, - "response": { - "bodySize": 475, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 475, - "text": "{\"_id\":\"fc7e47cd-c679-4211-8e05-a36654f23c67\",\"_rev\":\"-1432043869\",\"useUniversalIdForUsername\":true,\"minimumPasswordLength\":8,\"mixedCaseForPasswordChangeMessages\":false,\"_type\":{\"_id\":\"IdentityStoreDecisionNode\",\"name\":\"Identity Store Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"TRUE\",\"displayName\":\"True\"},{\"id\":\"FALSE\",\"displayName\":\"False\"},{\"id\":\"LOCKED\",\"displayName\":\"Locked\"},{\"id\":\"CANCELLED\",\"displayName\":\"Cancelled\"},{\"id\":\"EXPIRED\",\"displayName\":\"Expired\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1432043869\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "475" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:03 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:03.798Z", - "time": 155, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 155 - } - }, - { - "_id": "bbe183c66861becc67da220da17f3222", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ValidatedUsernameNode/7a351800-fb7e-4145-903c-388554747556" - }, - "response": { - "bodySize": 259, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 259, - "text": "{\"_id\":\"7a351800-fb7e-4145-903c-388554747556\",\"_rev\":\"1005646283\",\"usernameAttribute\":\"userName\",\"validateInput\":false,\"_type\":{\"_id\":\"ValidatedUsernameNode\",\"name\":\"Platform Username\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1005646283\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "259" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:04.787Z", - "time": 229, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 229 - } - }, - { - "_id": "c818e3f4484a37146866d11c3f59ca19", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ValidatedPasswordNode/804e6a68-1720-442b-926a-007e90f02782" - }, - "response": { - "bodySize": 258, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 258, - "text": "{\"_id\":\"804e6a68-1720-442b-926a-007e90f02782\",\"_rev\":\"695550246\",\"passwordAttribute\":\"password\",\"validateInput\":false,\"_type\":{\"_id\":\"ValidatedPasswordNode\",\"name\":\"Platform Password\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"695550246\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "258" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:04.789Z", - "time": 278, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 278 - } - }, - { - "_id": "c1acc25f44f3cadb14d3d1e8e62b9e7e", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2080, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/SelectIdPNode/228a44d5-fd78-4278-8999-fdd470ea7ebf" - }, - "response": { - "bodySize": 440, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 440, - "text": "{\"_id\":\"228a44d5-fd78-4278-8999-fdd470ea7ebf\",\"_rev\":\"-1175277026\",\"includeLocalAuthentication\":true,\"filteredProviders\":[],\"identityAttribute\":\"mail\",\"passwordAttribute\":\"password\",\"offerOnlyExisting\":false,\"_type\":{\"_id\":\"SelectIdPNode\",\"name\":\"Select Identity Provider\",\"collection\":true},\"_outcomes\":[{\"id\":\"socialAuthentication\",\"displayName\":\"Social Authentication\"},{\"id\":\"localAuthentication\",\"displayName\":\"Local Authentication\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1175277026\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "440" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:04 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:04.791Z", - "time": 191, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 191 - } - }, - { - "_id": "eeccd57f891a215e5acf0e7aa32847e1", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ValidatedPasswordNode/dd16c8d4-baca-4ae0-bcd8-fb98b9040524" - }, - "response": { - "bodySize": 258, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 258, - "text": "{\"_id\":\"dd16c8d4-baca-4ae0-bcd8-fb98b9040524\",\"_rev\":\"148590759\",\"passwordAttribute\":\"password\",\"validateInput\":false,\"_type\":{\"_id\":\"ValidatedPasswordNode\",\"name\":\"Platform Password\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"148590759\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "258" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:04.792Z", - "time": 271, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 271 - } - }, - { - "_id": "a8071b1248c4f4c2bb79f7494774a738", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2080, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/SelectIdPNode/038f9b2a-36b2-489b-9e03-386c9a62ea21" - }, - "response": { - "bodySize": 439, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 439, - "text": "{\"_id\":\"038f9b2a-36b2-489b-9e03-386c9a62ea21\",\"_rev\":\"-409686295\",\"includeLocalAuthentication\":true,\"filteredProviders\":[],\"identityAttribute\":\"mail\",\"passwordAttribute\":\"password\",\"offerOnlyExisting\":false,\"_type\":{\"_id\":\"SelectIdPNode\",\"name\":\"Select Identity Provider\",\"collection\":true},\"_outcomes\":[{\"id\":\"socialAuthentication\",\"displayName\":\"Social Authentication\"},{\"id\":\"localAuthentication\",\"displayName\":\"Local Authentication\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-409686295\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "439" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:04 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:04.794Z", - "time": 181, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 181 - } - }, - { - "_id": "783649a98ab2fef565296f0fb58478c2", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/j00" - }, - "response": { - "bodySize": 1588, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1588, - "text": "{\"_id\":\"j00\",\"_rev\":\"214130857\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"513a2ab4-f0b8-4f94-b840-6fe14796cc84\",\"innerTreeOnly\":false,\"nodes\":{\"01d3785f-7fb4-44a7-9458-72c380a9818f\":{\"connections\":{\"true\":\"3c1e8d61-0c48-44ba-86dc-52e9555b6aeb\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":348,\"y\":61},\"39b48197-f4be-42b9-800a-866587b4b9b5\":{\"connections\":{\"true\":\"ba503a1e-633e-4d0d-ba18-c9a9b1105b5b\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":365,\"y\":252},\"3c1e8d61-0c48-44ba-86dc-52e9555b6aeb\":{\"connections\":{\"true\":\"ba503a1e-633e-4d0d-ba18-c9a9b1105b5b\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":567,\"y\":64},\"513a2ab4-f0b8-4f94-b840-6fe14796cc84\":{\"connections\":{\"level only\":\"39b48197-f4be-42b9-800a-866587b4b9b5\",\"none\":\"ba503a1e-633e-4d0d-ba18-c9a9b1105b5b\",\"shared and level\":\"01d3785f-7fb4-44a7-9458-72c380a9818f\",\"shared only\":\"d17ffaa1-2c61-4abd-9bb1-2559160d0a5c\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":117,\"y\":117},\"ba503a1e-633e-4d0d-ba18-c9a9b1105b5b\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"debug\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":760,\"y\":137},\"d17ffaa1-2c61-4abd-9bb1-2559160d0a5c\":{\"connections\":{\"true\":\"ba503a1e-633e-4d0d-ba18-c9a9b1105b5b\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":338,\"y\":156}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":132,\"y\":364},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1000,\"y\":137},\"startNode\":{\"x\":0,\"y\":0}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"214130857\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1588" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.078Z", - "time": 64, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 64 - } - }, - { - "_id": "a4e3d2724640406dc1f5ff6dd7a881b5", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/01d3785f-7fb4-44a7-9458-72c380a9818f" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"01d3785f-7fb4-44a7-9458-72c380a9818f\",\"_rev\":\"-853523981\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-853523981\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.149Z", - "time": 73, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 73 - } - }, - { - "_id": "21278fee2e95a0a91b560a68e01e1036", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/39b48197-f4be-42b9-800a-866587b4b9b5" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"39b48197-f4be-42b9-800a-866587b4b9b5\",\"_rev\":\"1609152298\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1609152298\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.151Z", - "time": 76, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 76 - } - }, - { - "_id": "02670ccf0201465b288842fae7164308", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/3c1e8d61-0c48-44ba-86dc-52e9555b6aeb" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"3c1e8d61-0c48-44ba-86dc-52e9555b6aeb\",\"_rev\":\"1672315064\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1672315064\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.154Z", - "time": 72, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 72 - } - }, - { - "_id": "549df2ad66b3e1f0afa571267996414d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/513a2ab4-f0b8-4f94-b840-6fe14796cc84" - }, - "response": { - "bodySize": 529, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 529, - "text": "{\"_id\":\"513a2ab4-f0b8-4f94-b840-6fe14796cc84\",\"_rev\":\"-318011549\",\"script\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"outcomes\":[\"shared and level\",\"shared only\",\"level only\",\"none\"],\"outputs\":[\"*\",\"mode\",\"level\"],\"inputs\":[\"*\",\"mode\",\"level\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"shared and level\",\"displayName\":\"shared and level\"},{\"id\":\"shared only\",\"displayName\":\"shared only\"},{\"id\":\"level only\",\"displayName\":\"level only\"},{\"id\":\"none\",\"displayName\":\"none\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-318011549\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "529" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.156Z", - "time": 92, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 92 - } - }, - { - "_id": "e9f8ab26444a583477a266d1248079cb", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/ba503a1e-633e-4d0d-ba18-c9a9b1105b5b" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"ba503a1e-633e-4d0d-ba18-c9a9b1105b5b\",\"_rev\":\"970966657\",\"script\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"970966657\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.158Z", - "time": 97, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 97 - } - }, - { - "_id": "f2b4f44e69957932c5aee6b91fe0b8e9", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/d17ffaa1-2c61-4abd-9bb1-2559160d0a5c" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"d17ffaa1-2c61-4abd-9bb1-2559160d0a5c\",\"_rev\":\"-2064120483\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-2064120483\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.160Z", - "time": 96, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 96 - } - }, - { - "_id": "3e336832befac6a1d1a393bfb94dc818", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/j01" - }, - "response": { - "bodySize": 1619, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1619, - "text": "{\"_id\":\"j01\",\"_rev\":\"-523887030\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"f129f0df-b49e-453b-97fb-db508e3893ce\",\"innerTreeOnly\":false,\"nodes\":{\"6674b4ac-dd89-4e13-9440-6f81194e3a22\":{\"connections\":{\"true\":\"bb1e96af-f316-4eb0-b1c6-36b3f1af9e35\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":0,\"y\":0},\"89ce5d57-82fa-4d58-8d15-0329f7dbd7e7\":{\"connections\":{\"true\":\"bdfbe97c-1ff4-4162-85bc-47f6f14b2c66\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":0,\"y\":0},\"bb1e96af-f316-4eb0-b1c6-36b3f1af9e35\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":0,\"y\":0},\"bdfbe97c-1ff4-4162-85bc-47f6f14b2c66\":{\"connections\":{\"true\":\"bb1e96af-f316-4eb0-b1c6-36b3f1af9e35\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":0,\"y\":0},\"e92d5139-b8a6-43dc-9b13-95ba1d0dc53c\":{\"connections\":{\"true\":\"bb1e96af-f316-4eb0-b1c6-36b3f1af9e35\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":0,\"y\":0},\"f129f0df-b49e-453b-97fb-db508e3893ce\":{\"connections\":{\"level only\":\"e92d5139-b8a6-43dc-9b13-95ba1d0dc53c\",\"none\":\"bb1e96af-f316-4eb0-b1c6-36b3f1af9e35\",\"shared and level\":\"89ce5d57-82fa-4d58-8d15-0329f7dbd7e7\",\"shared only\":\"6674b4ac-dd89-4e13-9440-6f81194e3a22\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":0,\"y\":0}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-523887030\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1619" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.261Z", - "time": 53, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 53 - } - }, - { - "_id": "2d53ec084661291ba5b77074bd0d404f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/6674b4ac-dd89-4e13-9440-6f81194e3a22" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"6674b4ac-dd89-4e13-9440-6f81194e3a22\",\"_rev\":\"-572093512\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-572093512\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.321Z", - "time": 76, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 76 - } - }, - { - "_id": "24b509074cbb65a0fdf55e873ed3e236", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/89ce5d57-82fa-4d58-8d15-0329f7dbd7e7" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"89ce5d57-82fa-4d58-8d15-0329f7dbd7e7\",\"_rev\":\"-1475826260\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1475826260\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.322Z", - "time": 142, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 142 - } - }, - { - "_id": "f1db37c9dd2892a4b79fdea893fe8bbb", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/bb1e96af-f316-4eb0-b1c6-36b3f1af9e35" - }, - "response": { - "bodySize": 254, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 254, - "text": "{\"_id\":\"bb1e96af-f316-4eb0-b1c6-36b3f1af9e35\",\"_rev\":\"2105288152\",\"tree\":\"j00\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"2105288152\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "254" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.324Z", - "time": 76, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 76 - } - }, - { - "_id": "f3d53e092107d2bce172dcabf7775603", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/bdfbe97c-1ff4-4162-85bc-47f6f14b2c66" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"bdfbe97c-1ff4-4162-85bc-47f6f14b2c66\",\"_rev\":\"-939615205\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-939615205\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.325Z", - "time": 138, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 138 - } - }, - { - "_id": "b89158f979a984906cc9d43dfe4ed2c6", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/e92d5139-b8a6-43dc-9b13-95ba1d0dc53c" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"e92d5139-b8a6-43dc-9b13-95ba1d0dc53c\",\"_rev\":\"288852992\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"288852992\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.326Z", - "time": 72, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 72 - } - }, - { - "_id": "bd7476f37b13e3d355a37f0ee9f40665", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/f129f0df-b49e-453b-97fb-db508e3893ce" - }, - "response": { - "bodySize": 527, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 527, - "text": "{\"_id\":\"f129f0df-b49e-453b-97fb-db508e3893ce\",\"_rev\":\"52245222\",\"script\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"outcomes\":[\"shared and level\",\"shared only\",\"level only\",\"none\"],\"outputs\":[\"*\",\"mode\",\"level\"],\"inputs\":[\"*\",\"mode\",\"level\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"shared and level\",\"displayName\":\"shared and level\"},{\"id\":\"shared only\",\"displayName\":\"shared only\"},{\"id\":\"level only\",\"displayName\":\"level only\"},{\"id\":\"none\",\"displayName\":\"none\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"52245222\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "527" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 784, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.327Z", - "time": 85, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 85 - } - }, - { - "_id": "9e912e0715a8e10b305fe9022719421a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/j02" - }, - "response": { - "bodySize": 1685, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1685, - "text": "{\"_id\":\"j02\",\"_rev\":\"2029292005\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"59b06306-a886-443d-92df-7a27a60c394e\",\"innerTreeOnly\":false,\"nodes\":{\"2dbd2d37-c659-48cf-8357-c9fc1166e3a7\":{\"connections\":{\"true\":\"56899fef-92a1-4f2a-ade3-973c81eb3af1\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"4416aff7-3ebd-47e6-9831-c2f6bbe3ae24\":{\"connections\":{\"true\":\"56899fef-92a1-4f2a-ade3-973c81eb3af1\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"56899fef-92a1-4f2a-ade3-973c81eb3af1\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":233.015625},\"59b06306-a886-443d-92df-7a27a60c394e\":{\"connections\":{\"level only\":\"4416aff7-3ebd-47e6-9831-c2f6bbe3ae24\",\"none\":\"56899fef-92a1-4f2a-ade3-973c81eb3af1\",\"shared and level\":\"e0983ead-4918-48f6-858d-9aff0f03759c\",\"shared only\":\"cbb3d506-b267-4b99-9edd-363e90aac997\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"cbb3d506-b267-4b99-9edd-363e90aac997\":{\"connections\":{\"true\":\"56899fef-92a1-4f2a-ade3-973c81eb3af1\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"e0983ead-4918-48f6-858d-9aff0f03759c\":{\"connections\":{\"true\":\"2dbd2d37-c659-48cf-8357-c9fc1166e3a7\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"2029292005\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1685" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.471Z", - "time": 140, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 140 - } - }, - { - "_id": "558f7668f56d9483442f61fa36986594", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/2dbd2d37-c659-48cf-8357-c9fc1166e3a7" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"2dbd2d37-c659-48cf-8357-c9fc1166e3a7\",\"_rev\":\"1485747872\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1485747872\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.619Z", - "time": 113, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 113 - } - }, - { - "_id": "c73d13746acacb561d124960f39177ad", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/4416aff7-3ebd-47e6-9831-c2f6bbe3ae24" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"4416aff7-3ebd-47e6-9831-c2f6bbe3ae24\",\"_rev\":\"978548317\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"978548317\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.620Z", - "time": 74, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 74 - } - }, - { - "_id": "a7583dcfad74c677d39e12e97a99ecf4", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/56899fef-92a1-4f2a-ade3-973c81eb3af1" - }, - "response": { - "bodySize": 254, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 254, - "text": "{\"_id\":\"56899fef-92a1-4f2a-ade3-973c81eb3af1\",\"_rev\":\"-568833890\",\"tree\":\"j01\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-568833890\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "254" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.621Z", - "time": 75, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 75 - } - }, - { - "_id": "d1ef09311ff4744ba9647b5f4376b0f3", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/59b06306-a886-443d-92df-7a27a60c394e" - }, - "response": { - "bodySize": 527, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 527, - "text": "{\"_id\":\"59b06306-a886-443d-92df-7a27a60c394e\",\"_rev\":\"49592573\",\"script\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"outcomes\":[\"shared and level\",\"shared only\",\"level only\",\"none\"],\"outputs\":[\"*\",\"mode\",\"level\"],\"inputs\":[\"*\",\"mode\",\"level\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"shared and level\",\"displayName\":\"shared and level\"},{\"id\":\"shared only\",\"displayName\":\"shared only\"},{\"id\":\"level only\",\"displayName\":\"level only\"},{\"id\":\"none\",\"displayName\":\"none\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"49592573\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "527" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 784, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.622Z", - "time": 85, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 85 - } - }, - { - "_id": "9f7d70a4c0733ac416067147963a87e4", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/cbb3d506-b267-4b99-9edd-363e90aac997" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"cbb3d506-b267-4b99-9edd-363e90aac997\",\"_rev\":\"-1997428236\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1997428236\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.623Z", - "time": 74, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 74 - } - }, - { - "_id": "41ae29997f0f336cee3cbbf98b093378", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/e0983ead-4918-48f6-858d-9aff0f03759c" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"e0983ead-4918-48f6-858d-9aff0f03759c\",\"_rev\":\"1611025039\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1611025039\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.625Z", - "time": 81, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 81 - } - }, - { - "_id": "a2b1aa2e1961835cc2264c8f7d162ee9", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/j03" - }, - "response": { - "bodySize": 1686, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1686, - "text": "{\"_id\":\"j03\",\"_rev\":\"-1352811052\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"e0cfbd13-6f1e-4924-9d2d-0f7c23507172\",\"innerTreeOnly\":false,\"nodes\":{\"35a4f94b-c895-46b9-bc0a-93cf59233759\":{\"connections\":{\"true\":\"bcb8c535-5ecd-4d3d-b970-26816de96bf2\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"3a92300d-6d64-451d-8156-30cb51781026\":{\"connections\":{\"true\":\"bcb8c535-5ecd-4d3d-b970-26816de96bf2\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"6f9de973-9ed4-41f5-b43d-4036041e2b96\":{\"connections\":{\"true\":\"3a92300d-6d64-451d-8156-30cb51781026\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"bcb8c535-5ecd-4d3d-b970-26816de96bf2\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":233.015625},\"e0cfbd13-6f1e-4924-9d2d-0f7c23507172\":{\"connections\":{\"level only\":\"35a4f94b-c895-46b9-bc0a-93cf59233759\",\"none\":\"bcb8c535-5ecd-4d3d-b970-26816de96bf2\",\"shared and level\":\"6f9de973-9ed4-41f5-b43d-4036041e2b96\",\"shared only\":\"fae7424e-13c9-45bd-b3a2-045773671a3f\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"fae7424e-13c9-45bd-b3a2-045773671a3f\":{\"connections\":{\"true\":\"bcb8c535-5ecd-4d3d-b970-26816de96bf2\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1352811052\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1686" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 788, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.737Z", - "time": 73, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 73 - } - }, - { - "_id": "7eb69cfe1356d77fbbbe18e733721019", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/35a4f94b-c895-46b9-bc0a-93cf59233759" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"35a4f94b-c895-46b9-bc0a-93cf59233759\",\"_rev\":\"1564723806\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1564723806\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.816Z", - "time": 66, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 66 - } - }, - { - "_id": "a9cb57c5ee314e69f5b3ebc724743e0c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/3a92300d-6d64-451d-8156-30cb51781026" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"3a92300d-6d64-451d-8156-30cb51781026\",\"_rev\":\"2096216426\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"2096216426\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.817Z", - "time": 76, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 76 - } - }, - { - "_id": "7d1e226d6191dec5c3a9154f6a13fb1d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/6f9de973-9ed4-41f5-b43d-4036041e2b96" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"6f9de973-9ed4-41f5-b43d-4036041e2b96\",\"_rev\":\"846932888\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"846932888\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.818Z", - "time": 81, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 81 - } - }, - { - "_id": "c70d864eb9b75290b6dcd82c2265f9c2", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/bcb8c535-5ecd-4d3d-b970-26816de96bf2" - }, - "response": { - "bodySize": 255, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 255, - "text": "{\"_id\":\"bcb8c535-5ecd-4d3d-b970-26816de96bf2\",\"_rev\":\"-2072424763\",\"tree\":\"j02\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-2072424763\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "255" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.819Z", - "time": 82, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 82 - } - }, - { - "_id": "12038ec11da4bedff65b0f7f80c6dffd", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/e0cfbd13-6f1e-4924-9d2d-0f7c23507172" - }, - "response": { - "bodySize": 528, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 528, - "text": "{\"_id\":\"e0cfbd13-6f1e-4924-9d2d-0f7c23507172\",\"_rev\":\"278641360\",\"script\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"outcomes\":[\"shared and level\",\"shared only\",\"level only\",\"none\"],\"outputs\":[\"*\",\"mode\",\"level\"],\"inputs\":[\"*\",\"mode\",\"level\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"shared and level\",\"displayName\":\"shared and level\"},{\"id\":\"shared only\",\"displayName\":\"shared only\"},{\"id\":\"level only\",\"displayName\":\"level only\"},{\"id\":\"none\",\"displayName\":\"none\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"278641360\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "528" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.820Z", - "time": 85, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 85 - } - }, - { - "_id": "ef5d6a026ad1478fed2ca8edb03111c0", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/fae7424e-13c9-45bd-b3a2-045773671a3f" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"fae7424e-13c9-45bd-b3a2-045773671a3f\",\"_rev\":\"-502225245\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-502225245\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.821Z", - "time": 76, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 76 - } - }, - { - "_id": "c2f7cca344fb9d97b5bf00b77265e233", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/j04" - }, - "response": { - "bodySize": 1686, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1686, - "text": "{\"_id\":\"j04\",\"_rev\":\"-1089876293\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"040b6c89-313b-4664-92e0-6732017384b8\",\"innerTreeOnly\":false,\"nodes\":{\"00e75aa0-2f9b-4895-9257-d515286fd64b\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":233.015625},\"040b6c89-313b-4664-92e0-6732017384b8\":{\"connections\":{\"level only\":\"d10104e9-1f8d-4da6-a110-28d879d13959\",\"none\":\"00e75aa0-2f9b-4895-9257-d515286fd64b\",\"shared and level\":\"f5c317ce-fabd-4a10-9907-c71cea037844\",\"shared only\":\"9603ef52-30f0-4ddc-b3c0-28dac83c7bdb\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"69ae8ec1-de43-44ac-98e5-733db80ac176\":{\"connections\":{\"true\":\"00e75aa0-2f9b-4895-9257-d515286fd64b\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"9603ef52-30f0-4ddc-b3c0-28dac83c7bdb\":{\"connections\":{\"true\":\"00e75aa0-2f9b-4895-9257-d515286fd64b\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"d10104e9-1f8d-4da6-a110-28d879d13959\":{\"connections\":{\"true\":\"00e75aa0-2f9b-4895-9257-d515286fd64b\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"f5c317ce-fabd-4a10-9907-c71cea037844\":{\"connections\":{\"true\":\"69ae8ec1-de43-44ac-98e5-733db80ac176\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1089876293\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1686" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:05 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 788, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.910Z", - "time": 53, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 53 - } - }, - { - "_id": "6fec7a0299935c8c3709ae9fdebbdbf7", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/00e75aa0-2f9b-4895-9257-d515286fd64b" - }, - "response": { - "bodySize": 253, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 253, - "text": "{\"_id\":\"00e75aa0-2f9b-4895-9257-d515286fd64b\",\"_rev\":\"415392584\",\"tree\":\"j03\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"415392584\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "253" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.973Z", - "time": 75, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 75 - } - }, - { - "_id": "94c352cbe9f526a30ea75002278e7fc9", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/040b6c89-313b-4664-92e0-6732017384b8" - }, - "response": { - "bodySize": 529, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 529, - "text": "{\"_id\":\"040b6c89-313b-4664-92e0-6732017384b8\",\"_rev\":\"-605917161\",\"script\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"outcomes\":[\"shared and level\",\"shared only\",\"level only\",\"none\"],\"outputs\":[\"*\",\"mode\",\"level\"],\"inputs\":[\"*\",\"mode\",\"level\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"shared and level\",\"displayName\":\"shared and level\"},{\"id\":\"shared only\",\"displayName\":\"shared only\"},{\"id\":\"level only\",\"displayName\":\"level only\"},{\"id\":\"none\",\"displayName\":\"none\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-605917161\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "529" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.974Z", - "time": 62, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 62 - } - }, - { - "_id": "222aabf7941d4e336113325c91e34731", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/69ae8ec1-de43-44ac-98e5-733db80ac176" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"69ae8ec1-de43-44ac-98e5-733db80ac176\",\"_rev\":\"2146242142\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"2146242142\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.975Z", - "time": 77, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 77 - } - }, - { - "_id": "2a49081ff4e17d4e8128f6120d972697", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/9603ef52-30f0-4ddc-b3c0-28dac83c7bdb" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"9603ef52-30f0-4ddc-b3c0-28dac83c7bdb\",\"_rev\":\"1934780085\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1934780085\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.976Z", - "time": 70, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 70 - } - }, - { - "_id": "c4b4a25c2e1c9f9618540b01e1d511d4", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/d10104e9-1f8d-4da6-a110-28d879d13959" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"d10104e9-1f8d-4da6-a110-28d879d13959\",\"_rev\":\"-219838938\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-219838938\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.977Z", - "time": 73, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 73 - } - }, - { - "_id": "3251139337ba954d7eb76418bf322b1f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/f5c317ce-fabd-4a10-9907-c71cea037844" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"f5c317ce-fabd-4a10-9907-c71cea037844\",\"_rev\":\"1796672161\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1796672161\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:05.978Z", - "time": 69, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 69 - } - }, - { - "_id": "fb62e2ec87f38e87e99e380ec4789d25", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/j05" - }, - "response": { - "bodySize": 1685, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1685, - "text": "{\"_id\":\"j05\",\"_rev\":\"1652057497\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"622179cb-98f1-484a-820d-9a0df6e45e95\",\"innerTreeOnly\":false,\"nodes\":{\"11f1c31c-50a9-4717-8213-420f6932481f\":{\"connections\":{\"true\":\"e90ae257-c279-46e0-9b43-5ecd89784d77\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"3c106772-ace7-4808-8f3a-9840de8f67f0\":{\"connections\":{\"true\":\"f17ecb7c-abc3-4523-9943-4cbdd90305cb\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"622179cb-98f1-484a-820d-9a0df6e45e95\":{\"connections\":{\"level only\":\"3c106772-ace7-4808-8f3a-9840de8f67f0\",\"none\":\"f17ecb7c-abc3-4523-9943-4cbdd90305cb\",\"shared and level\":\"11f1c31c-50a9-4717-8213-420f6932481f\",\"shared only\":\"a0782616-84b7-4bf5-87ed-a01fb3018563\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"a0782616-84b7-4bf5-87ed-a01fb3018563\":{\"connections\":{\"true\":\"f17ecb7c-abc3-4523-9943-4cbdd90305cb\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"e90ae257-c279-46e0-9b43-5ecd89784d77\":{\"connections\":{\"true\":\"f17ecb7c-abc3-4523-9943-4cbdd90305cb\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"f17ecb7c-abc3-4523-9943-4cbdd90305cb\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":232.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1652057497\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1685" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.057Z", - "time": 54, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 54 - } - }, - { - "_id": "f7a4224b695e445fd35ebb804295bc5f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/11f1c31c-50a9-4717-8213-420f6932481f" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"11f1c31c-50a9-4717-8213-420f6932481f\",\"_rev\":\"715843294\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"715843294\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.118Z", - "time": 72, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 72 - } - }, - { - "_id": "e7b3bb81c41d01ea9d480c2f35cb7da1", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/3c106772-ace7-4808-8f3a-9840de8f67f0" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"3c106772-ace7-4808-8f3a-9840de8f67f0\",\"_rev\":\"202853816\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"202853816\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.119Z", - "time": 70, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 70 - } - }, - { - "_id": "bab3715b89089fda2fc557443a09ac99", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/622179cb-98f1-484a-820d-9a0df6e45e95" - }, - "response": { - "bodySize": 530, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 530, - "text": "{\"_id\":\"622179cb-98f1-484a-820d-9a0df6e45e95\",\"_rev\":\"-1022065915\",\"script\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"outcomes\":[\"shared and level\",\"shared only\",\"level only\",\"none\"],\"outputs\":[\"*\",\"mode\",\"level\"],\"inputs\":[\"*\",\"mode\",\"level\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"shared and level\",\"displayName\":\"shared and level\"},{\"id\":\"shared only\",\"displayName\":\"shared only\"},{\"id\":\"level only\",\"displayName\":\"level only\"},{\"id\":\"none\",\"displayName\":\"none\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1022065915\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "530" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.119Z", - "time": 76, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 76 - } - }, - { - "_id": "dc15aa213f1ff9509eb6be7a5ae07e01", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/a0782616-84b7-4bf5-87ed-a01fb3018563" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"a0782616-84b7-4bf5-87ed-a01fb3018563\",\"_rev\":\"156265951\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"156265951\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.120Z", - "time": 74, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 74 - } - }, - { - "_id": "f7bca787677bb78ee6d560856d045ce0", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/e90ae257-c279-46e0-9b43-5ecd89784d77" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"e90ae257-c279-46e0-9b43-5ecd89784d77\",\"_rev\":\"2040408899\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"2040408899\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.121Z", - "time": 71, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 71 - } - }, - { - "_id": "11a86a920257925ac35ad61958e88ac4", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/f17ecb7c-abc3-4523-9943-4cbdd90305cb" - }, - "response": { - "bodySize": 253, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 253, - "text": "{\"_id\":\"f17ecb7c-abc3-4523-9943-4cbdd90305cb\",\"_rev\":\"730701700\",\"tree\":\"j04\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"730701700\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "253" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.122Z", - "time": 77, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 77 - } - }, - { - "_id": "854880b638ddd46a9ddf266c9804d030", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/j06" - }, - "response": { - "bodySize": 1684, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1684, - "text": "{\"_id\":\"j06\",\"_rev\":\"605160891\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"44b8651c-7c1e-41f1-b9a6-2e441b0ce05a\",\"innerTreeOnly\":false,\"nodes\":{\"1d59caff-243c-45bd-b7d0-6dcc563989c5\":{\"connections\":{\"true\":\"2de08e9e-bf7b-4fa1-8265-59a8e4a3f7c3\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"2de08e9e-bf7b-4fa1-8265-59a8e4a3f7c3\":{\"connections\":{\"true\":\"409c251f-c23b-411d-9009-d3b3d26d1b90\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"409c251f-c23b-411d-9009-d3b3d26d1b90\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":232.015625},\"44b8651c-7c1e-41f1-b9a6-2e441b0ce05a\":{\"connections\":{\"level only\":\"fe8f27df-8a27-4d88-9196-834ce398b2b7\",\"none\":\"409c251f-c23b-411d-9009-d3b3d26d1b90\",\"shared and level\":\"1d59caff-243c-45bd-b7d0-6dcc563989c5\",\"shared only\":\"da878771-421c-463f-aad7-4d5f2ad5e59a\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"da878771-421c-463f-aad7-4d5f2ad5e59a\":{\"connections\":{\"true\":\"409c251f-c23b-411d-9009-d3b3d26d1b90\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"fe8f27df-8a27-4d88-9196-834ce398b2b7\":{\"connections\":{\"true\":\"409c251f-c23b-411d-9009-d3b3d26d1b90\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"605160891\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1684" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.205Z", - "time": 62, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 62 - } - }, - { - "_id": "80cd2e809770e81a455a5f2fc8e5e214", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/1d59caff-243c-45bd-b7d0-6dcc563989c5" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"1d59caff-243c-45bd-b7d0-6dcc563989c5\",\"_rev\":\"-1941208375\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1941208375\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.275Z", - "time": 59, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 59 - } - }, - { - "_id": "580dcc1ade7920d6cfd738d914d7a1c8", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/2de08e9e-bf7b-4fa1-8265-59a8e4a3f7c3" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"2de08e9e-bf7b-4fa1-8265-59a8e4a3f7c3\",\"_rev\":\"1105672105\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1105672105\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.277Z", - "time": 85, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 85 - } - }, - { - "_id": "2fde9475acd09131e9f7fe508c201c79", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/409c251f-c23b-411d-9009-d3b3d26d1b90" - }, - "response": { - "bodySize": 254, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 254, - "text": "{\"_id\":\"409c251f-c23b-411d-9009-d3b3d26d1b90\",\"_rev\":\"-688245766\",\"tree\":\"j05\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-688245766\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "254" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.279Z", - "time": 109, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 109 - } - }, - { - "_id": "713bf7a15f7b826208809736ab93055a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/44b8651c-7c1e-41f1-b9a6-2e441b0ce05a" - }, - "response": { - "bodySize": 528, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 528, - "text": "{\"_id\":\"44b8651c-7c1e-41f1-b9a6-2e441b0ce05a\",\"_rev\":\"600150282\",\"script\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"outcomes\":[\"shared and level\",\"shared only\",\"level only\",\"none\"],\"outputs\":[\"*\",\"mode\",\"level\"],\"inputs\":[\"*\",\"mode\",\"level\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"shared and level\",\"displayName\":\"shared and level\"},{\"id\":\"shared only\",\"displayName\":\"shared only\"},{\"id\":\"level only\",\"displayName\":\"level only\"},{\"id\":\"none\",\"displayName\":\"none\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"600150282\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "528" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.280Z", - "time": 55, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 55 - } - }, - { - "_id": "f965dac4b451ed73a5824aa7c113ee8b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/da878771-421c-463f-aad7-4d5f2ad5e59a" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"da878771-421c-463f-aad7-4d5f2ad5e59a\",\"_rev\":\"1834306764\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1834306764\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.282Z", - "time": 72, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 72 - } - }, - { - "_id": "456d7a1bcd8f6d17fe6b39ed89ac30f0", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/fe8f27df-8a27-4d88-9196-834ce398b2b7" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"fe8f27df-8a27-4d88-9196-834ce398b2b7\",\"_rev\":\"-274854951\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-274854951\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.283Z", - "time": 57, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 57 - } - }, - { - "_id": "cc2d3b500f84e59c8c2664b8d442e969", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/j07" - }, - "response": { - "bodySize": 1685, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1685, - "text": "{\"_id\":\"j07\",\"_rev\":\"-937100459\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"13b12fe6-cf53-46a4-a83d-0a3c1fda814f\",\"innerTreeOnly\":false,\"nodes\":{\"13b12fe6-cf53-46a4-a83d-0a3c1fda814f\":{\"connections\":{\"level only\":\"d90dd9f8-8b12-4e90-abaf-228ecc0174a7\",\"none\":\"e62d7a4d-2012-4a2a-a6ef-d6a0e0d552d9\",\"shared and level\":\"d9a06d3a-7e3f-4244-9a32-63ffa0d26e00\",\"shared only\":\"ac6ee166-73c0-4f73-b8db-4fe8ff6a25c0\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"ac6ee166-73c0-4f73-b8db-4fe8ff6a25c0\":{\"connections\":{\"true\":\"e62d7a4d-2012-4a2a-a6ef-d6a0e0d552d9\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"d90dd9f8-8b12-4e90-abaf-228ecc0174a7\":{\"connections\":{\"true\":\"e62d7a4d-2012-4a2a-a6ef-d6a0e0d552d9\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"d9a06d3a-7e3f-4244-9a32-63ffa0d26e00\":{\"connections\":{\"true\":\"f2fe740c-cd75-460a-8baa-fe4b52ecc947\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"e62d7a4d-2012-4a2a-a6ef-d6a0e0d552d9\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":232.015625},\"f2fe740c-cd75-460a-8baa-fe4b52ecc947\":{\"connections\":{\"true\":\"e62d7a4d-2012-4a2a-a6ef-d6a0e0d552d9\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-937100459\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1685" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.393Z", - "time": 60, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 60 - } - }, - { - "_id": "ba377492f4d9411b4f1fcd8e8ecf8088", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/13b12fe6-cf53-46a4-a83d-0a3c1fda814f" - }, - "response": { - "bodySize": 529, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 529, - "text": "{\"_id\":\"13b12fe6-cf53-46a4-a83d-0a3c1fda814f\",\"_rev\":\"-729439911\",\"script\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"outcomes\":[\"shared and level\",\"shared only\",\"level only\",\"none\"],\"outputs\":[\"*\",\"mode\",\"level\"],\"inputs\":[\"*\",\"mode\",\"level\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"shared and level\",\"displayName\":\"shared and level\"},{\"id\":\"shared only\",\"displayName\":\"shared only\"},{\"id\":\"level only\",\"displayName\":\"level only\"},{\"id\":\"none\",\"displayName\":\"none\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-729439911\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "529" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.460Z", - "time": 100, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 100 - } - }, - { - "_id": "7de0162cb6cddeba5a67d77931640c6e", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/ac6ee166-73c0-4f73-b8db-4fe8ff6a25c0" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"ac6ee166-73c0-4f73-b8db-4fe8ff6a25c0\",\"_rev\":\"-657863610\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-657863610\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.461Z", - "time": 84, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 84 - } - }, - { - "_id": "a86262a22a063210f379fdfb5299e995", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/d90dd9f8-8b12-4e90-abaf-228ecc0174a7" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"d90dd9f8-8b12-4e90-abaf-228ecc0174a7\",\"_rev\":\"1401033700\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1401033700\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.462Z", - "time": 68, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 68 - } - }, - { - "_id": "e80983d73dae00ff5d5f19e35d3bdb60", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/d9a06d3a-7e3f-4244-9a32-63ffa0d26e00" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"d9a06d3a-7e3f-4244-9a32-63ffa0d26e00\",\"_rev\":\"-1427545353\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1427545353\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.463Z", - "time": 94, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 94 - } - }, - { - "_id": "1d1f4b06a40d137a6edd7b8c908bee08", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/e62d7a4d-2012-4a2a-a6ef-d6a0e0d552d9" - }, - "response": { - "bodySize": 254, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 254, - "text": "{\"_id\":\"e62d7a4d-2012-4a2a-a6ef-d6a0e0d552d9\",\"_rev\":\"1658650162\",\"tree\":\"j06\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1658650162\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "254" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.464Z", - "time": 69, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 69 - } - }, - { - "_id": "cc50dcf5929585a68044039efcb522b9", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/f2fe740c-cd75-460a-8baa-fe4b52ecc947" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"f2fe740c-cd75-460a-8baa-fe4b52ecc947\",\"_rev\":\"-976416946\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-976416946\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.465Z", - "time": 90, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 90 - } - }, - { - "_id": "33fbcd834fe9939bef7c5e2ac4bd648f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/j08" - }, - "response": { - "bodySize": 1686, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1686, - "text": "{\"_id\":\"j08\",\"_rev\":\"-1997695217\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"d429b2b5-b215-46a5-b239-4994df65cb8b\",\"innerTreeOnly\":false,\"nodes\":{\"042b600b-71cb-45a8-93ae-a6f57b16a6e5\":{\"connections\":{\"true\":\"87ced99b-bfa5-40d4-ba07-c8fc31f6cc6d\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"66026170-5088-4fcd-a6c8-ed89d7a5c79d\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":232.015625},\"8096649e-973e-4209-88ce-e1d87ae2bb96\":{\"connections\":{\"true\":\"66026170-5088-4fcd-a6c8-ed89d7a5c79d\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"87ced99b-bfa5-40d4-ba07-c8fc31f6cc6d\":{\"connections\":{\"true\":\"66026170-5088-4fcd-a6c8-ed89d7a5c79d\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"948e21f4-c512-450a-9d42-e0d629217834\":{\"connections\":{\"true\":\"66026170-5088-4fcd-a6c8-ed89d7a5c79d\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"d429b2b5-b215-46a5-b239-4994df65cb8b\":{\"connections\":{\"level only\":\"8096649e-973e-4209-88ce-e1d87ae2bb96\",\"none\":\"66026170-5088-4fcd-a6c8-ed89d7a5c79d\",\"shared and level\":\"042b600b-71cb-45a8-93ae-a6f57b16a6e5\",\"shared only\":\"948e21f4-c512-450a-9d42-e0d629217834\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1997695217\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1686" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 788, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.565Z", - "time": 62, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 62 - } - }, - { - "_id": "0196f8961176b24b01be1329bf21cc84", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/042b600b-71cb-45a8-93ae-a6f57b16a6e5" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"042b600b-71cb-45a8-93ae-a6f57b16a6e5\",\"_rev\":\"336262962\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"336262962\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.634Z", - "time": 99, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 99 - } - }, - { - "_id": "f473707192c98f8928bc54f82e047af6", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/66026170-5088-4fcd-a6c8-ed89d7a5c79d" - }, - "response": { - "bodySize": 254, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 254, - "text": "{\"_id\":\"66026170-5088-4fcd-a6c8-ed89d7a5c79d\",\"_rev\":\"-245838054\",\"tree\":\"j07\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-245838054\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "254" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.635Z", - "time": 89, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 89 - } - }, - { - "_id": "765dfe255bf11a0ba8a998f7bfaae711", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/8096649e-973e-4209-88ce-e1d87ae2bb96" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"8096649e-973e-4209-88ce-e1d87ae2bb96\",\"_rev\":\"487424420\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"487424420\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.636Z", - "time": 82, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 82 - } - }, - { - "_id": "43ae5df23f2c07387d4591c320885e8c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/87ced99b-bfa5-40d4-ba07-c8fc31f6cc6d" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"87ced99b-bfa5-40d4-ba07-c8fc31f6cc6d\",\"_rev\":\"-1836282733\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1836282733\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.637Z", - "time": 87, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 87 - } - }, - { - "_id": "dfbebca43815f9f207223568fdafd936", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/948e21f4-c512-450a-9d42-e0d629217834" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"948e21f4-c512-450a-9d42-e0d629217834\",\"_rev\":\"1493812252\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1493812252\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.638Z", - "time": 83, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 83 - } - }, - { - "_id": "7394d6053fce775926752eb0853fcc29", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/d429b2b5-b215-46a5-b239-4994df65cb8b" - }, - "response": { - "bodySize": 529, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 529, - "text": "{\"_id\":\"d429b2b5-b215-46a5-b239-4994df65cb8b\",\"_rev\":\"-354817335\",\"script\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"outcomes\":[\"shared and level\",\"shared only\",\"level only\",\"none\"],\"outputs\":[\"*\",\"mode\",\"level\"],\"inputs\":[\"*\",\"mode\",\"level\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"shared and level\",\"displayName\":\"shared and level\"},{\"id\":\"shared only\",\"displayName\":\"shared only\"},{\"id\":\"level only\",\"displayName\":\"level only\"},{\"id\":\"none\",\"displayName\":\"none\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-354817335\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "529" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.639Z", - "time": 79, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 79 - } - }, - { - "_id": "58e5667d5890986fe33dc01eae7a9647", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/j09" - }, - "response": { - "bodySize": 1686, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1686, - "text": "{\"_id\":\"j09\",\"_rev\":\"-1358707527\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"251f35c3-1a32-4520-be10-1f4af9600935\",\"innerTreeOnly\":false,\"nodes\":{\"251f35c3-1a32-4520-be10-1f4af9600935\":{\"connections\":{\"level only\":\"56b82371-0c61-4dc3-8d06-c1158415b8f9\",\"none\":\"6df24fdd-0b6c-4def-bf42-77af998f28b8\",\"shared and level\":\"8c5e9cb5-471b-4dd6-b150-ecaaeda98195\",\"shared only\":\"f57cf53c-b4c6-48f7-84e8-91f535a2e8f8\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625},\"56b82371-0c61-4dc3-8d06-c1158415b8f9\":{\"connections\":{\"true\":\"6df24fdd-0b6c-4def-bf42-77af998f28b8\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"6df24fdd-0b6c-4def-bf42-77af998f28b8\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":233.015625},\"8c5e9cb5-471b-4dd6-b150-ecaaeda98195\":{\"connections\":{\"true\":\"bb294e05-6b6b-4478-b46f-b8d9e7711c66\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"bb294e05-6b6b-4478-b46f-b8d9e7711c66\":{\"connections\":{\"true\":\"6df24fdd-0b6c-4def-bf42-77af998f28b8\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"f57cf53c-b4c6-48f7-84e8-91f535a2e8f8\":{\"connections\":{\"true\":\"6df24fdd-0b6c-4def-bf42-77af998f28b8\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1358707527\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1686" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 788, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.737Z", - "time": 59, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 59 - } - }, - { - "_id": "207bd4d4e1f14d303ae7e8d885dad3b2", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/251f35c3-1a32-4520-be10-1f4af9600935" - }, - "response": { - "bodySize": 529, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 529, - "text": "{\"_id\":\"251f35c3-1a32-4520-be10-1f4af9600935\",\"_rev\":\"1952240839\",\"script\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"outcomes\":[\"shared and level\",\"shared only\",\"level only\",\"none\"],\"outputs\":[\"*\",\"mode\",\"level\"],\"inputs\":[\"*\",\"mode\",\"level\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"shared and level\",\"displayName\":\"shared and level\"},{\"id\":\"shared only\",\"displayName\":\"shared only\"},{\"id\":\"level only\",\"displayName\":\"level only\"},{\"id\":\"none\",\"displayName\":\"none\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1952240839\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "529" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.804Z", - "time": 87, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 87 - } - }, - { - "_id": "8273913da6a215e22f53fa7975421484", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/56b82371-0c61-4dc3-8d06-c1158415b8f9" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"56b82371-0c61-4dc3-8d06-c1158415b8f9\",\"_rev\":\"2037842793\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"2037842793\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.805Z", - "time": 97, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 97 - } - }, - { - "_id": "cd4e915fd75b456d5ef8f42fddf08dab", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/6df24fdd-0b6c-4def-bf42-77af998f28b8" - }, - "response": { - "bodySize": 253, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 253, - "text": "{\"_id\":\"6df24fdd-0b6c-4def-bf42-77af998f28b8\",\"_rev\":\"425555480\",\"tree\":\"j08\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"425555480\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "253" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.806Z", - "time": 75, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 75 - } - }, - { - "_id": "79a774fb46440f91df12f01afcb9e48f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/8c5e9cb5-471b-4dd6-b150-ecaaeda98195" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"8c5e9cb5-471b-4dd6-b150-ecaaeda98195\",\"_rev\":\"-1095657842\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1095657842\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.807Z", - "time": 97, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 97 - } - }, - { - "_id": "618711b2d624bb2751a8078fdfea3d05", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/bb294e05-6b6b-4478-b46f-b8d9e7711c66" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"bb294e05-6b6b-4478-b46f-b8d9e7711c66\",\"_rev\":\"620562185\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"620562185\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.808Z", - "time": 105, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 105 - } - }, - { - "_id": "1a712028edb14ec8197c4dc80a61eed9", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/f57cf53c-b4c6-48f7-84e8-91f535a2e8f8" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"f57cf53c-b4c6-48f7-84e8-91f535a2e8f8\",\"_rev\":\"-1901839502\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1901839502\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.809Z", - "time": 98, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 98 - } - }, - { - "_id": "84303d641c9db25f9973474ad37a732b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/j10" - }, - "response": { - "bodySize": 1684, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1684, - "text": "{\"_id\":\"j10\",\"_rev\":\"751431822\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"c91d626e-1156-41bd-b1fb-d292f640fba6\",\"innerTreeOnly\":false,\"nodes\":{\"300feda0-3248-49a9-b60f-01df802b2229\":{\"connections\":{\"true\":\"c7fcf7ae-1ab5-474b-b5b0-272e10468fbd\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":395,\"y\":345.015625},\"40afb384-e9b6-4dcb-acde-04de109474c8\":{\"connections\":{\"true\":\"c7fcf7ae-1ab5-474b-b5b0-272e10468fbd\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":393,\"y\":259.015625},\"8d7d64ee-da20-461f-a2ca-206b7479dd67\":{\"connections\":{\"true\":\"c7fcf7ae-1ab5-474b-b5b0-272e10468fbd\"},\"displayName\":\"level\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":598,\"y\":173.015625},\"97ef9d96-99e7-4d2d-b6c6-4177b5397ead\":{\"connections\":{\"true\":\"8d7d64ee-da20-461f-a2ca-206b7479dd67\"},\"displayName\":\"shared\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":392,\"y\":173.015625},\"c7fcf7ae-1ab5-474b-b5b0-272e10468fbd\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"nest\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":816,\"y\":233.015625},\"c91d626e-1156-41bd-b1fb-d292f640fba6\":{\"connections\":{\"level only\":\"300feda0-3248-49a9-b60f-01df802b2229\",\"none\":\"c7fcf7ae-1ab5-474b-b5b0-272e10468fbd\",\"shared and level\":\"97ef9d96-99e7-4d2d-b6c6-4177b5397ead\",\"shared only\":\"40afb384-e9b6-4dcb-acde-04de109474c8\"},\"displayName\":\"mode\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":167,\"y\":210.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1236,\"y\":145},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1236,\"y\":253},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"751431822\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1684" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:06 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.917Z", - "time": 55, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 55 - } - }, - { - "_id": "b1a0677f5bb0e8446fad7781a71c6ea6", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/300feda0-3248-49a9-b60f-01df802b2229" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"300feda0-3248-49a9-b60f-01df802b2229\",\"_rev\":\"-1128011381\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1128011381\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.979Z", - "time": 74, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 74 - } - }, - { - "_id": "a0f5d74de08a9305a4567fb9512cce97", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/40afb384-e9b6-4dcb-acde-04de109474c8" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"40afb384-e9b6-4dcb-acde-04de109474c8\",\"_rev\":\"-1673284725\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1673284725\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.980Z", - "time": 80, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 80 - } - }, - { - "_id": "c144e615c253b1d99073ed86c38f460e", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/8d7d64ee-da20-461f-a2ca-206b7479dd67" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"8d7d64ee-da20-461f-a2ca-206b7479dd67\",\"_rev\":\"-1870614074\",\"script\":\"41c24257-d7fc-4654-8b46-c2666dc5b56d\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1870614074\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.981Z", - "time": 65, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 65 - } - }, - { - "_id": "ace1cc0750d89ca9c311145621a2dd70", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/97ef9d96-99e7-4d2d-b6c6-4177b5397ead" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"97ef9d96-99e7-4d2d-b6c6-4177b5397ead\",\"_rev\":\"-1576825857\",\"script\":\"1b52a7e0-4019-40fa-958a-15a49870e901\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1576825857\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.982Z", - "time": 74, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 74 - } - }, - { - "_id": "749805d29ae0c0706b3e0bc0bf8cc85d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/c7fcf7ae-1ab5-474b-b5b0-272e10468fbd" - }, - "response": { - "bodySize": 254, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 254, - "text": "{\"_id\":\"c7fcf7ae-1ab5-474b-b5b0-272e10468fbd\",\"_rev\":\"-728542802\",\"tree\":\"j09\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-728542802\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "254" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.983Z", - "time": 78, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 78 - } - }, - { - "_id": "d6f85464cef0e580f0b0f54984f301a9", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/c91d626e-1156-41bd-b1fb-d292f640fba6" - }, - "response": { - "bodySize": 529, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 529, - "text": "{\"_id\":\"c91d626e-1156-41bd-b1fb-d292f640fba6\",\"_rev\":\"1583393008\",\"script\":\"5bbdaeff-ddee-44b9-b608-8d413d7d65a6\",\"outcomes\":[\"shared and level\",\"shared only\",\"level only\",\"none\"],\"outputs\":[\"*\",\"mode\",\"level\"],\"inputs\":[\"*\",\"mode\",\"level\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"shared and level\",\"displayName\":\"shared and level\"},{\"id\":\"shared only\",\"displayName\":\"shared only\"},{\"id\":\"level only\",\"displayName\":\"level only\"},{\"id\":\"none\",\"displayName\":\"none\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1583393008\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "529" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:06.984Z", - "time": 75, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 75 - } - }, - { - "_id": "d5719d5dc595671a70874c7ea6e7091c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2035, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/Login" - }, - "response": { - "bodySize": 1877, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1877, - "text": "{\"_id\":\"Login\",\"_rev\":\"-453684268\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Authentication\\\"]\"},\"entryNodeId\":\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\",\"innerTreeOnly\":false,\"nodes\":{\"2119f332-0f69-4088-a7a1-6582bf0f2001\":{\"connections\":{\"Reject\":\"51e8c4c1-3509-4635-90e6-d2cc31c4a6a5\",\"Retry\":\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\"},\"displayName\":\"Retry Limit Decision\",\"nodeType\":\"RetryLimitDecisionNode\",\"x\":612,\"y\":105.015625},\"33b24514-3e50-4180-8f08-ab6f4e51b07e\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Inner Tree Evaluator\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":827,\"y\":13},\"51e8c4c1-3509-4635-90e6-d2cc31c4a6a5\":{\"connections\":{\"outcome\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Account Lockout\",\"nodeType\":\"AccountLockoutNode\",\"x\":836,\"y\":184.015625},\"7f0c2aee-8c74-4d02-82a6-9d4ed9d11708\":{\"connections\":{\"CANCELLED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"EXPIRED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"FALSE\":\"2119f332-0f69-4088-a7a1-6582bf0f2001\",\"LOCKED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"TRUE\":\"bba3e0d8-8525-4e82-bf48-ac17f7988917\"},\"displayName\":\"Identity Store Decision\",\"nodeType\":\"IdentityStoreDecisionNode\",\"x\":352,\"y\":40.015625},\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\":{\"connections\":{\"outcome\":\"7f0c2aee-8c74-4d02-82a6-9d4ed9d11708\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":136,\"y\":59},\"bba3e0d8-8525-4e82-bf48-ac17f7988917\":{\"connections\":{\"outcome\":\"33b24514-3e50-4180-8f08-ab6f4e51b07e\"},\"displayName\":\"Increment Login Count\",\"nodeType\":\"IncrementLoginCountNode\",\"x\":579,\"y\":34}},\"description\":\"Platform Login Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1073,\"y\":30},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":761,\"y\":401},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-453684268\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1877" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.066Z", - "time": 58, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 58 - } - }, - { - "_id": "a9028ea60fa7db6a9c1970dce6821e6e", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/RetryLimitDecisionNode/2119f332-0f69-4088-a7a1-6582bf0f2001" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"2119f332-0f69-4088-a7a1-6582bf0f2001\",\"_rev\":\"-809908897\",\"incrementUserAttributeOnFailure\":true,\"retryLimit\":5,\"_type\":{\"_id\":\"RetryLimitDecisionNode\",\"name\":\"Retry Limit Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"Retry\",\"displayName\":\"Retry\"},{\"id\":\"Reject\",\"displayName\":\"Reject\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-809908897\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.132Z", - "time": 94, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 94 - } - }, - { - "_id": "8731efc49234ade1995c63bbb5fbc15a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/33b24514-3e50-4180-8f08-ab6f4e51b07e" - }, - "response": { - "bodySize": 270, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 270, - "text": "{\"_id\":\"33b24514-3e50-4180-8f08-ab6f4e51b07e\",\"_rev\":\"-1405518667\",\"tree\":\"ProgressiveProfile\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1405518667\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "270" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.133Z", - "time": 71, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 71 - } - }, - { - "_id": "05b08c7a31d8aad01bd3e2c85569b32f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2085, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/AccountLockoutNode/51e8c4c1-3509-4635-90e6-d2cc31c4a6a5" - }, - "response": { - "bodySize": 222, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 222, - "text": "{\"_id\":\"51e8c4c1-3509-4635-90e6-d2cc31c4a6a5\",\"_rev\":\"-1811954406\",\"lockAction\":\"LOCK\",\"_type\":{\"_id\":\"AccountLockoutNode\",\"name\":\"Account Lockout\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1811954406\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "222" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.134Z", - "time": 88, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 88 - } - }, - { - "_id": "0385f723f216eba2c93d884658892111", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2092, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/IdentityStoreDecisionNode/7f0c2aee-8c74-4d02-82a6-9d4ed9d11708" - }, - "response": { - "bodySize": 475, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 475, - "text": "{\"_id\":\"7f0c2aee-8c74-4d02-82a6-9d4ed9d11708\",\"_rev\":\"1663221949\",\"useUniversalIdForUsername\":false,\"minimumPasswordLength\":8,\"mixedCaseForPasswordChangeMessages\":false,\"_type\":{\"_id\":\"IdentityStoreDecisionNode\",\"name\":\"Identity Store Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"TRUE\",\"displayName\":\"True\"},{\"id\":\"FALSE\",\"displayName\":\"False\"},{\"id\":\"LOCKED\",\"displayName\":\"Locked\"},{\"id\":\"CANCELLED\",\"displayName\":\"Cancelled\"},{\"id\":\"EXPIRED\",\"displayName\":\"Expired\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1663221949\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "475" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.135Z", - "time": 65, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 65 - } - }, - { - "_id": "16df2344e10560938d972ad2df50185f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PageNode/a12bc72f-ad97-4f1e-a789-a1fa3dd566c8" - }, - "response": { - "bodySize": 670, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 670, - "text": "{\"_id\":\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\",\"_rev\":\"-1594114\",\"nodes\":[{\"_id\":\"7354982f-57b6-4b04-9ddc-f1dd1e1e07d0\",\"nodeType\":\"ValidatedUsernameNode\",\"displayName\":\"Platform Username\"},{\"_id\":\"0c80c39b-4813-4e67-b4fb-5a0bba85f994\",\"nodeType\":\"ValidatedPasswordNode\",\"displayName\":\"Platform Password\"}],\"pageDescription\":{\"en\":\"New here? Create an account
Forgot username? Forgot password?\"},\"pageHeader\":{\"en\":\"Sign In\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1594114\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "670" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 784, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.136Z", - "time": 71, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 71 - } - }, - { - "_id": "49bd48bacdfeb26577fd65fa70bb0ef2", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2090, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/IncrementLoginCountNode/bba3e0d8-8525-4e82-bf48-ac17f7988917" - }, - "response": { - "bodySize": 243, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 243, - "text": "{\"_id\":\"bba3e0d8-8525-4e82-bf48-ac17f7988917\",\"_rev\":\"2098371942\",\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"IncrementLoginCountNode\",\"name\":\"Increment Login Count\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"2098371942\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "243" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.137Z", - "time": 96, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 96 - } - }, - { - "_id": "caa5af1bef15f8f06a361ee5c188515d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ValidatedUsernameNode/7354982f-57b6-4b04-9ddc-f1dd1e1e07d0" - }, - "response": { - "bodySize": 260, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 260, - "text": "{\"_id\":\"7354982f-57b6-4b04-9ddc-f1dd1e1e07d0\",\"_rev\":\"-2064640544\",\"usernameAttribute\":\"userName\",\"validateInput\":false,\"_type\":{\"_id\":\"ValidatedUsernameNode\",\"name\":\"Platform Username\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-2064640544\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "260" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.239Z", - "time": 59, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 59 - } - }, - { - "_id": "2271649d75cba6d10fbc5e93f05ccf91", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ValidatedPasswordNode/0c80c39b-4813-4e67-b4fb-5a0bba85f994" - }, - "response": { - "bodySize": 260, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 260, - "text": "{\"_id\":\"0c80c39b-4813-4e67-b4fb-5a0bba85f994\",\"_rev\":\"-1763423776\",\"passwordAttribute\":\"password\",\"validateInput\":false,\"_type\":{\"_id\":\"ValidatedPasswordNode\",\"name\":\"Platform Password\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1763423776\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "260" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.240Z", - "time": 59, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 59 - } - }, - { - "_id": "8a7b272276e4ba23812428dc74d7d262", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2042, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/OrphanedTest" - }, - "response": { - "bodySize": 831, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 831, - "text": "{\"_id\":\"OrphanedTest\",\"_rev\":\"-764260244\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"343e745f-923a-43c4-8675-649a490fd0a3\",\"innerTreeOnly\":false,\"nodes\":{\"343e745f-923a-43c4-8675-649a490fd0a3\":{\"connections\":{\"CANCELLED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"EXPIRED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"FALSE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"LOCKED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"TRUE\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Identity Store Decision\",\"nodeType\":\"IdentityStoreDecisionNode\",\"x\":407.046875,\"y\":190.015625}},\"description\":\"Test orphaned nodes\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":704,\"y\":129},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":707,\"y\":381},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-764260244\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "831" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.306Z", - "time": 60, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 60 - } - }, - { - "_id": "b6d10fca78ba7b6076e11a787b5fae03", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2092, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/IdentityStoreDecisionNode/343e745f-923a-43c4-8675-649a490fd0a3" - }, - "response": { - "bodySize": 474, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 474, - "text": "{\"_id\":\"343e745f-923a-43c4-8675-649a490fd0a3\",\"_rev\":\"775696658\",\"useUniversalIdForUsername\":false,\"minimumPasswordLength\":8,\"mixedCaseForPasswordChangeMessages\":false,\"_type\":{\"_id\":\"IdentityStoreDecisionNode\",\"name\":\"Identity Store Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"TRUE\",\"displayName\":\"True\"},{\"id\":\"FALSE\",\"displayName\":\"False\"},{\"id\":\"LOCKED\",\"displayName\":\"Locked\"},{\"id\":\"CANCELLED\",\"displayName\":\"Cancelled\"},{\"id\":\"EXPIRED\",\"displayName\":\"Expired\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"775696658\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "474" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.371Z", - "time": 77, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 77 - } - }, - { - "_id": "473e9b34a6bf1a6aa1eb1004cbf88f2c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2048, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/ProgressiveProfile" - }, - "response": { - "bodySize": 1352, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1352, - "text": "{\"_id\":\"ProgressiveProfile\",\"_rev\":\"512701181\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Progressive Profile\\\"]\"},\"entryNodeId\":\"8afdaec3-275e-4301-bb53-34f03e6a4b29\",\"innerTreeOnly\":false,\"nodes\":{\"423a959a-a1b9-498a-b0f7-596b6b6e775a\":{\"connections\":{\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"PATCHED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Patch Object\",\"nodeType\":\"PatchObjectNode\",\"x\":766,\"y\":36},\"8afdaec3-275e-4301-bb53-34f03e6a4b29\":{\"connections\":{\"false\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"true\":\"a1f45b44-5bf7-4c57-aa3f-75c619c7db8e\"},\"displayName\":\"Login Count Decision\",\"nodeType\":\"LoginCountDecisionNode\",\"x\":152,\"y\":36},\"a1f45b44-5bf7-4c57-aa3f-75c619c7db8e\":{\"connections\":{\"false\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"true\":\"a5aecad8-854a-4ed5-b719-ff6c90e858c0\"},\"displayName\":\"Query Filter Decision\",\"nodeType\":\"QueryFilterDecisionNode\",\"x\":357,\"y\":36},\"a5aecad8-854a-4ed5-b719-ff6c90e858c0\":{\"connections\":{\"outcome\":\"423a959a-a1b9-498a-b0f7-596b6b6e775a\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":555,\"y\":20}},\"description\":\"Prompt for missing preferences on 3rd login\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":802,\"y\":312},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":919,\"y\":171},\"startNode\":{\"x\":50,\"y\":58.5}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"512701181\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1352" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.454Z", - "time": 62, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 62 - } - }, - { - "_id": "ff526d4ef9b7652969199a232e71b1e4", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2082, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PatchObjectNode/423a959a-a1b9-498a-b0f7-596b6b6e775a" - }, - "response": { - "bodySize": 347, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 347, - "text": "{\"_id\":\"423a959a-a1b9-498a-b0f7-596b6b6e775a\",\"_rev\":\"1288219125\",\"identityResource\":\"managed/alpha_user\",\"patchAsObject\":false,\"ignoredFields\":[],\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"PatchObjectNode\",\"name\":\"Patch Object\",\"collection\":true},\"_outcomes\":[{\"id\":\"PATCHED\",\"displayName\":\"Patched\"},{\"id\":\"FAILURE\",\"displayName\":\"Failed\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1288219125\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "347" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.525Z", - "time": 112, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 112 - } - }, - { - "_id": "6cfa4cd6fdf4197c5144383b91084489", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/LoginCountDecisionNode/8afdaec3-275e-4301-bb53-34f03e6a4b29" - }, - "response": { - "bodySize": 300, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 300, - "text": "{\"_id\":\"8afdaec3-275e-4301-bb53-34f03e6a4b29\",\"_rev\":\"-1679047423\",\"interval\":\"AT\",\"identityAttribute\":\"userName\",\"amount\":3,\"_type\":{\"_id\":\"LoginCountDecisionNode\",\"name\":\"Login Count Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1679047423\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "300" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.527Z", - "time": 81, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 81 - } - }, - { - "_id": "fa942a421d34de3d4235dd2c3926d039", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2090, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/QueryFilterDecisionNode/a1f45b44-5bf7-4c57-aa3f-75c619c7db8e" - }, - "response": { - "bodySize": 378, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 378, - "text": "{\"_id\":\"a1f45b44-5bf7-4c57-aa3f-75c619c7db8e\",\"_rev\":\"-1852493841\",\"identityAttribute\":\"userName\",\"queryFilter\":\"!(/preferences pr) or /preferences/marketing eq false or /preferences/updates eq false\",\"_type\":{\"_id\":\"QueryFilterDecisionNode\",\"name\":\"Query Filter Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1852493841\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "378" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.529Z", - "time": 82, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 82 - } - }, - { - "_id": "31cc5fdd4313500242450d60853cddd0", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PageNode/a5aecad8-854a-4ed5-b719-ff6c90e858c0" - }, - "response": { - "bodySize": 387, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 387, - "text": "{\"_id\":\"a5aecad8-854a-4ed5-b719-ff6c90e858c0\",\"_rev\":\"380010937\",\"nodes\":[{\"_id\":\"0a042e10-b22e-4e02-86c4-65e26e775f7a\",\"nodeType\":\"AttributeCollectorNode\",\"displayName\":\"Attribute Collector\"}],\"pageDescription\":{},\"pageHeader\":{\"en\":\"Please select your preferences\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"380010937\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "387" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.531Z", - "time": 67, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 67 - } - }, - { - "_id": "132fa72302d20e38cb463216b4833116", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/AttributeCollectorNode/0a042e10-b22e-4e02-86c4-65e26e775f7a" - }, - "response": { - "bodySize": 351, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 351, - "text": "{\"_id\":\"0a042e10-b22e-4e02-86c4-65e26e775f7a\",\"_rev\":\"-1210529544\",\"attributesToCollect\":[\"preferences/updates\",\"preferences/marketing\"],\"identityAttribute\":\"userName\",\"validateInputs\":false,\"required\":false,\"_type\":{\"_id\":\"AttributeCollectorNode\",\"name\":\"Attribute Collector\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1210529544\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "351" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.642Z", - "time": 65, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 65 - } - }, - { - "_id": "796fbe6c2836d50a9041222158d14ae0", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2041, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/RadioChoice" - }, - "response": { - "bodySize": 650, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 650, - "text": "{\"_id\":\"RadioChoice\",\"_rev\":\"947126104\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[]\"},\"entryNodeId\":\"5d6cd20e-5074-43de-8832-fddd95fb078e\",\"innerTreeOnly\":false,\"nodes\":{\"5d6cd20e-5074-43de-8832-fddd95fb078e\":{\"connections\":{\"one\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"three\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"two\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":260,\"y\":409.015625}},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":500,\"y\":50},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":744,\"y\":327},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"947126104\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "650" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.711Z", - "time": 60, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 60 - } - }, - { - "_id": "91395b9cefc3ba5e9f6ab5e9b8acfc01", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PageNode/5d6cd20e-5074-43de-8832-fddd95fb078e" - }, - "response": { - "bodySize": 516, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 516, - "text": "{\"_id\":\"5d6cd20e-5074-43de-8832-fddd95fb078e\",\"_rev\":\"-450923473\",\"nodes\":[{\"_id\":\"a566e474-99f3-46e4-9e70-682402bfaa84\",\"nodeType\":\"ChoiceCollectorNode\",\"displayName\":\"Choice Collector\"}],\"pageDescription\":{},\"stage\":\"{\\\"ChoiceCallback\\\":[{\\\"id\\\":\\\"a566e474-99f3-46e4-9e70-682402bfaa84\\\",\\\"displayType\\\":\\\"radio\\\"}]}\",\"pageHeader\":{},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"one\",\"displayName\":\"one\"},{\"id\":\"two\",\"displayName\":\"two\"},{\"id\":\"three\",\"displayName\":\"three\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-450923473\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "516" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.775Z", - "time": 67, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 67 - } - }, - { - "_id": "17878d77a385236080a278789af6c7cc", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2086, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ChoiceCollectorNode/a566e474-99f3-46e4-9e70-682402bfaa84" - }, - "response": { - "bodySize": 338, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 338, - "text": "{\"_id\":\"a566e474-99f3-46e4-9e70-682402bfaa84\",\"_rev\":\"-514175851\",\"defaultChoice\":\"one\",\"choices\":[\"one\",\"two\",\"three\"],\"prompt\":\"Choice?\",\"_type\":{\"_id\":\"ChoiceCollectorNode\",\"name\":\"Choice Collector\",\"collection\":true},\"_outcomes\":[{\"id\":\"one\",\"displayName\":\"one\"},{\"id\":\"two\",\"displayName\":\"two\"},{\"id\":\"three\",\"displayName\":\"three\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-514175851\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "338" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:07 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.846Z", - "time": 142, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 142 - } - }, - { - "_id": "7d5293fb6844fdefed7a50dd0fd32a35", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2042, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/Registration" - }, - "response": { - "bodySize": 1239, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1239, - "text": "{\"_id\":\"Registration\",\"_rev\":\"-340494482\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Registration\\\"]\"},\"entryNodeId\":\"0c091c49-f3af-48fb-ac6f-07fba0499dd6\",\"innerTreeOnly\":false,\"nodes\":{\"0c091c49-f3af-48fb-ac6f-07fba0499dd6\":{\"connections\":{\"outcome\":\"466f8b54-07fb-4e31-a11d-a6842618cc37\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":261,\"y\":168},\"466f8b54-07fb-4e31-a11d-a6842618cc37\":{\"connections\":{\"outcome\":\"ad5dcbb3-7335-49b7-b3e7-7d850bb88237\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":484,\"y\":267.015625},\"97a15eb2-a015-4b6d-81a0-be78c3aa1a3b\":{\"connections\":{\"outcome\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Increment Login Count\",\"nodeType\":\"IncrementLoginCountNode\",\"x\":861,\"y\":221},\"ad5dcbb3-7335-49b7-b3e7-7d850bb88237\":{\"connections\":{\"CREATED\":\"97a15eb2-a015-4b6d-81a0-be78c3aa1a3b\",\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Create Object\",\"nodeType\":\"CreateObjectNode\",\"x\":717,\"y\":283}},\"description\":\"Platform Registration Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1085,\"y\":248},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":921,\"y\":370},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-340494482\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1239" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:07.993Z", - "time": 56, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 56 - } - }, - { - "_id": "abbf016d14d0a8e1a986d8b694a73375", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PageNode/0c091c49-f3af-48fb-ac6f-07fba0499dd6" - }, - "response": { - "bodySize": 1092, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1092, - "text": "{\"_id\":\"0c091c49-f3af-48fb-ac6f-07fba0499dd6\",\"_rev\":\"-30816295\",\"nodes\":[{\"_id\":\"7fcaf48e-a754-4959-858b-05b2933b825f\",\"nodeType\":\"ValidatedUsernameNode\",\"displayName\":\"Platform Username\"},{\"_id\":\"d3ce2036-1523-4ce8-b1a2-895a2a036667\",\"nodeType\":\"AttributeCollectorNode\",\"displayName\":\"Attribute Collector\"},{\"_id\":\"3d8709a1-f09f-4d1f-8094-2850e472c1db\",\"nodeType\":\"ValidatedPasswordNode\",\"displayName\":\"Platform Password\"},{\"_id\":\"120c69d3-90b4-4ad4-b7af-380e8b119340\",\"nodeType\":\"KbaCreateNode\",\"displayName\":\"KBA Definition\"},{\"_id\":\"b4a0e915-c15d-4b83-9c9d-18347d645976\",\"nodeType\":\"AcceptTermsAndConditionsNode\",\"displayName\":\"Accept Terms and Conditions\"}],\"pageDescription\":{\"en\":\"Signing up is fast and easy.
Already have an account? Sign In\"},\"stage\":\"{\\\"ValidatedCreatePasswordCallback\\\":[{\\\"id\\\":\\\"3d8709a1-f09f-4d1f-8094-2850e472c1db\\\",\\\"confirmPassword\\\":true,\\\"policyDisplayCheckmark\\\":true}]}\",\"pageHeader\":{\"en\":\"Sign Up\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-30816295\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1092" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.055Z", - "time": 110, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 110 - } - }, - { - "_id": "26827d45b811967e0b07f15906e772ee", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2083, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/EmailSuspendNode/466f8b54-07fb-4e31-a11d-a6842618cc37" - }, - "response": { - "bodySize": 436, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 436, - "text": "{\"_id\":\"466f8b54-07fb-4e31-a11d-a6842618cc37\",\"_rev\":\"1064387237\",\"emailSuspendMessage\":{\"en\":\"An email has been sent to the address you entered. Click the link in that email to proceed.\"},\"emailTemplateName\":\"registration\",\"identityAttribute\":\"userName\",\"emailAttribute\":\"mail\",\"objectLookup\":false,\"_type\":{\"_id\":\"EmailSuspendNode\",\"name\":\"Email Suspend Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1064387237\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "436" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.057Z", - "time": 55, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 55 - } - }, - { - "_id": "15f329c125e3a1d3b2ebec96f0763f27", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2090, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/IncrementLoginCountNode/97a15eb2-a015-4b6d-81a0-be78c3aa1a3b" - }, - "response": { - "bodySize": 243, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 243, - "text": "{\"_id\":\"97a15eb2-a015-4b6d-81a0-be78c3aa1a3b\",\"_rev\":\"-841385771\",\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"IncrementLoginCountNode\",\"name\":\"Increment Login Count\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-841385771\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "243" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.058Z", - "time": 63, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 63 - } - }, - { - "_id": "dd107f159d97bcec3ee3cf1e60bbc6ce", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2083, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/CreateObjectNode/ad5dcbb3-7335-49b7-b3e7-7d850bb88237" - }, - "response": { - "bodySize": 277, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 277, - "text": "{\"_id\":\"ad5dcbb3-7335-49b7-b3e7-7d850bb88237\",\"_rev\":\"-612221945\",\"identityResource\":\"managed/alpha_user\",\"_type\":{\"_id\":\"CreateObjectNode\",\"name\":\"Create Object\",\"collection\":true},\"_outcomes\":[{\"id\":\"CREATED\",\"displayName\":\"Created\"},{\"id\":\"FAILURE\",\"displayName\":\"Failed\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-612221945\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "277" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.059Z", - "time": 79, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 79 - } - }, - { - "_id": "f8127b92d0b79caad65aac8bf818b42b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ValidatedUsernameNode/7fcaf48e-a754-4959-858b-05b2933b825f" - }, - "response": { - "bodySize": 258, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 258, - "text": "{\"_id\":\"7fcaf48e-a754-4959-858b-05b2933b825f\",\"_rev\":\"1966656034\",\"usernameAttribute\":\"userName\",\"validateInput\":true,\"_type\":{\"_id\":\"ValidatedUsernameNode\",\"name\":\"Platform Username\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1966656034\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "258" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.172Z", - "time": 107, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 107 - } - }, - { - "_id": "1a7c6422a07ffd830e5543cff9014de1", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/AttributeCollectorNode/d3ce2036-1523-4ce8-b1a2-895a2a036667" - }, - "response": { - "bodySize": 373, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 373, - "text": "{\"_id\":\"d3ce2036-1523-4ce8-b1a2-895a2a036667\",\"_rev\":\"-1158802257\",\"attributesToCollect\":[\"givenName\",\"sn\",\"mail\",\"preferences/marketing\",\"preferences/updates\"],\"identityAttribute\":\"userName\",\"validateInputs\":true,\"required\":true,\"_type\":{\"_id\":\"AttributeCollectorNode\",\"name\":\"Attribute Collector\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1158802257\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "373" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.173Z", - "time": 173, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 173 - } - }, - { - "_id": "9c9dc569efa8ab04ec7a88344f585a43", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ValidatedPasswordNode/3d8709a1-f09f-4d1f-8094-2850e472c1db" - }, - "response": { - "bodySize": 259, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 259, - "text": "{\"_id\":\"3d8709a1-f09f-4d1f-8094-2850e472c1db\",\"_rev\":\"-1470058997\",\"passwordAttribute\":\"password\",\"validateInput\":true,\"_type\":{\"_id\":\"ValidatedPasswordNode\",\"name\":\"Platform Password\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1470058997\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "259" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.175Z", - "time": 101, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 101 - } - }, - { - "_id": "ec15d30435189f226a63dfb34f35d446", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2080, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/KbaCreateNode/120c69d3-90b4-4ad4-b7af-380e8b119340" - }, - "response": { - "bodySize": 272, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 272, - "text": "{\"_id\":\"120c69d3-90b4-4ad4-b7af-380e8b119340\",\"_rev\":\"-8134977\",\"message\":{\"en\":\"Select a security question\"},\"allowUserDefinedQuestions\":true,\"_type\":{\"_id\":\"KbaCreateNode\",\"name\":\"KBA Definition\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-8134977\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "272" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 784, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.176Z", - "time": 171, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 171 - } - }, - { - "_id": "9c0e4b4159bc36f18ae3b008f7a89717", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2095, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/AcceptTermsAndConditionsNode/b4a0e915-c15d-4b83-9c9d-18347d645976" - }, - "response": { - "bodySize": 223, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 223, - "text": "{\"_id\":\"b4a0e915-c15d-4b83-9c9d-18347d645976\",\"_rev\":\"1508860909\",\"_type\":{\"_id\":\"AcceptTermsAndConditionsNode\",\"name\":\"Accept Terms and Conditions\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1508860909\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "223" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.177Z", - "time": 94, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 94 - } - }, - { - "_id": "f073cda9e2f54bbb9b67e57b9c32395a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2043, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/ResetPassword" - }, - "response": { - "bodySize": 1435, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1435, - "text": "{\"_id\":\"ResetPassword\",\"_rev\":\"-501795106\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Password Reset\\\"]\"},\"entryNodeId\":\"cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b\",\"innerTreeOnly\":false,\"nodes\":{\"06c97be5-7fdd-4739-aea1-ecc7fe082865\":{\"connections\":{\"outcome\":\"e4c752f9-c625-48c9-9644-a58802fa9e9c\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":453,\"y\":66},\"21b8ddf3-0203-4ae1-ab05-51cf3a3a707a\":{\"connections\":{\"false\":\"06c97be5-7fdd-4739-aea1-ecc7fe082865\",\"true\":\"06c97be5-7fdd-4739-aea1-ecc7fe082865\"},\"displayName\":\"Identify Existing User\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":271,\"y\":21},\"989f0bf8-a328-4217-b82b-5275d79ca8bd\":{\"connections\":{\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"PATCHED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Patch Object\",\"nodeType\":\"PatchObjectNode\",\"x\":819,\"y\":61},\"cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b\":{\"connections\":{\"outcome\":\"21b8ddf3-0203-4ae1-ab05-51cf3a3a707a\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":103,\"y\":50},\"e4c752f9-c625-48c9-9644-a58802fa9e9c\":{\"connections\":{\"outcome\":\"989f0bf8-a328-4217-b82b-5275d79ca8bd\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":643,\"y\":50}},\"description\":\"Reset Password Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":970,\"y\":79},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":981,\"y\":147},\"startNode\":{\"x\":25,\"y\":25}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-501795106\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1435" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.352Z", - "time": 58, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 58 - } - }, - { - "_id": "4583b0e98854c0fcbc2b64af1c61b5de", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2083, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/EmailSuspendNode/06c97be5-7fdd-4739-aea1-ecc7fe082865" - }, - "response": { - "bodySize": 433, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 433, - "text": "{\"_id\":\"06c97be5-7fdd-4739-aea1-ecc7fe082865\",\"_rev\":\"-1138066714\",\"emailSuspendMessage\":{\"en\":\"An email has been sent to the address you entered. Click the link in that email to proceed.\"},\"emailTemplateName\":\"resetPassword\",\"identityAttribute\":\"mail\",\"emailAttribute\":\"mail\",\"objectLookup\":true,\"_type\":{\"_id\":\"EmailSuspendNode\",\"name\":\"Email Suspend Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1138066714\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "433" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.421Z", - "time": 73, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 73 - } - }, - { - "_id": "1bf29aa3247acbe95392e15b75a771c1", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2091, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/IdentifyExistingUserNode/21b8ddf3-0203-4ae1-ab05-51cf3a3a707a" - }, - "response": { - "bodySize": 295, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 295, - "text": "{\"_id\":\"21b8ddf3-0203-4ae1-ab05-51cf3a3a707a\",\"_rev\":\"402776485\",\"identityAttribute\":\"mail\",\"identifier\":\"userName\",\"_type\":{\"_id\":\"IdentifyExistingUserNode\",\"name\":\"Identify Existing User\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"402776485\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "295" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.423Z", - "time": 72, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 72 - } - }, - { - "_id": "d2e240c4c7b451cb3f01e2d96e04c3c6", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2082, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PatchObjectNode/989f0bf8-a328-4217-b82b-5275d79ca8bd" - }, - "response": { - "bodySize": 342, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 342, - "text": "{\"_id\":\"989f0bf8-a328-4217-b82b-5275d79ca8bd\",\"_rev\":\"555551070\",\"identityResource\":\"managed/alpha_user\",\"patchAsObject\":false,\"ignoredFields\":[],\"identityAttribute\":\"mail\",\"_type\":{\"_id\":\"PatchObjectNode\",\"name\":\"Patch Object\",\"collection\":true},\"_outcomes\":[{\"id\":\"PATCHED\",\"displayName\":\"Patched\"},{\"id\":\"FAILURE\",\"displayName\":\"Failed\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"555551070\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "342" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.424Z", - "time": 71, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 71 - } - }, - { - "_id": "14850472bc81ebdd4cf1ea53d81c96eb", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PageNode/cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b" - }, - "response": { - "bodySize": 444, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 444, - "text": "{\"_id\":\"cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b\",\"_rev\":\"86486605\",\"nodes\":[{\"_id\":\"276afa7c-a680-4cf4-a5f6-d6c78191f5c9\",\"nodeType\":\"AttributeCollectorNode\",\"displayName\":\"Attribute Collector\"}],\"pageDescription\":{\"en\":\"Enter your email address or Sign in\"},\"pageHeader\":{\"en\":\"Reset Password\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"86486605\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "444" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 784, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.425Z", - "time": 67, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 67 - } - }, - { - "_id": "80b1681e7e45b49b4498fda5a778a6ac", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PageNode/e4c752f9-c625-48c9-9644-a58802fa9e9c" - }, - "response": { - "bodySize": 391, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 391, - "text": "{\"_id\":\"e4c752f9-c625-48c9-9644-a58802fa9e9c\",\"_rev\":\"1593283676\",\"nodes\":[{\"_id\":\"009c19c8-9572-47bb-adb2-1f092c559a43\",\"nodeType\":\"ValidatedPasswordNode\",\"displayName\":\"Platform Password\"}],\"pageDescription\":{\"en\":\"Change password\"},\"pageHeader\":{\"en\":\"Reset Password\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1593283676\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "391" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.426Z", - "time": 65, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 65 - } - }, - { - "_id": "c46d0e3248413cac7fd4e2e7ae6a6b82", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/AttributeCollectorNode/276afa7c-a680-4cf4-a5f6-d6c78191f5c9" - }, - "response": { - "bodySize": 307, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 307, - "text": "{\"_id\":\"276afa7c-a680-4cf4-a5f6-d6c78191f5c9\",\"_rev\":\"-1256358519\",\"attributesToCollect\":[\"mail\"],\"identityAttribute\":\"mail\",\"validateInputs\":false,\"required\":true,\"_type\":{\"_id\":\"AttributeCollectorNode\",\"name\":\"Attribute Collector\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1256358519\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "307" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.500Z", - "time": 61, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 61 - } - }, - { - "_id": "8c83a0a4fb91e1064df1c8a94bc5ca65", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ValidatedPasswordNode/009c19c8-9572-47bb-adb2-1f092c559a43" - }, - "response": { - "bodySize": 257, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 257, - "text": "{\"_id\":\"009c19c8-9572-47bb-adb2-1f092c559a43\",\"_rev\":\"519412822\",\"passwordAttribute\":\"password\",\"validateInput\":true,\"_type\":{\"_id\":\"ValidatedPasswordNode\",\"name\":\"Platform Password\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"519412822\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "257" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.501Z", - "time": 60, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 60 - } - }, - { - "_id": "f1177bbbb5848aa34a6c76c37f0bee30", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2034, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/test" - }, - "response": { - "bodySize": 360, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 360, - "text": "{\"_id\":\"test\",\"_rev\":\"279923916\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{},\"entryNodeId\":\"d26176be-ea6f-4f2a-81cd-3d41dd6cee4d\",\"innerTreeOnly\":false,\"nodes\":{},\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":50,\"y\":117},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":152,\"y\":25},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"279923916\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "360" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.566Z", - "time": 53, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 53 - } - }, - { - "_id": "a611b02ecd2a48664d3c09fc7f9db527", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2044, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/trees/UpdatePassword" - }, - "response": { - "bodySize": 1888, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1888, - "text": "{\"_id\":\"UpdatePassword\",\"_rev\":\"-1067190791\",\"identityResource\":\"managed/alpha_user\",\"uiConfig\":{\"categories\":\"[\\\"Password Reset\\\"]\"},\"entryNodeId\":\"d1b79744-493a-44fe-bc26-7d324a8caa4e\",\"innerTreeOnly\":false,\"nodes\":{\"0f0904e6-1da3-4cdb-9abf-0d2545016fab\":{\"connections\":{\"false\":\"a3d97b53-e38a-4b24-aed0-a021050eb744\",\"true\":\"20237b34-26cb-4a0b-958f-abb422290d42\"},\"displayName\":\"Attribute Present Decision\",\"nodeType\":\"AttributePresentDecisionNode\",\"x\":288,\"y\":133},\"20237b34-26cb-4a0b-958f-abb422290d42\":{\"connections\":{\"outcome\":\"7d1deabe-cd98-49c8-943f-ca12305775f3\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":526,\"y\":46},\"3990ce1f-cce6-435b-ae1c-f138e89411c1\":{\"connections\":{\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"PATCHED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Patch Object\",\"nodeType\":\"PatchObjectNode\",\"x\":1062,\"y\":189},\"7d1deabe-cd98-49c8-943f-ca12305775f3\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\"},\"displayName\":\"Data Store Decision\",\"nodeType\":\"DataStoreDecisionNode\",\"x\":722,\"y\":45},\"a3d97b53-e38a-4b24-aed0-a021050eb744\":{\"connections\":{\"outcome\":\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":659,\"y\":223},\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\":{\"connections\":{\"outcome\":\"3990ce1f-cce6-435b-ae1c-f138e89411c1\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":943,\"y\":30},\"d1b79744-493a-44fe-bc26-7d324a8caa4e\":{\"connections\":{\"outcome\":\"0f0904e6-1da3-4cdb-9abf-0d2545016fab\"},\"displayName\":\"Get Session Data\",\"nodeType\":\"SessionDataNode\",\"x\":122,\"y\":129}},\"description\":\"Update password using active session\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1212,\"y\":128},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":939,\"y\":290},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1067190791\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1888" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 788, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.624Z", - "time": 55, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 55 - } - }, - { - "_id": "f9ab33314a42f3c778daa1aa0c875003", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2095, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/AttributePresentDecisionNode/0f0904e6-1da3-4cdb-9abf-0d2545016fab" - }, - "response": { - "bodySize": 315, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 315, - "text": "{\"_id\":\"0f0904e6-1da3-4cdb-9abf-0d2545016fab\",\"_rev\":\"-1218497043\",\"presentAttribute\":\"password\",\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"AttributePresentDecisionNode\",\"name\":\"Attribute Present Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1218497043\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "315" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.687Z", - "time": 118, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 118 - } - }, - { - "_id": "6b886002025229403817ae37f830dd85", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PageNode/20237b34-26cb-4a0b-958f-abb422290d42" - }, - "response": { - "bodySize": 408, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 408, - "text": "{\"_id\":\"20237b34-26cb-4a0b-958f-abb422290d42\",\"_rev\":\"1965792723\",\"nodes\":[{\"_id\":\"fe2962fc-4db3-4066-8624-553649afc438\",\"nodeType\":\"ValidatedPasswordNode\",\"displayName\":\"Platform Password\"}],\"pageDescription\":{\"en\":\"Enter current password\"},\"pageHeader\":{\"en\":\"Verify Existing Password\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1965792723\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "408" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.688Z", - "time": 90, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 90 - } - }, - { - "_id": "cec400be8caa027dfe722adab14cdc71", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2082, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PatchObjectNode/3990ce1f-cce6-435b-ae1c-f138e89411c1" - }, - "response": { - "bodySize": 357, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 357, - "text": "{\"_id\":\"3990ce1f-cce6-435b-ae1c-f138e89411c1\",\"_rev\":\"-212483341\",\"identityResource\":\"managed/alpha_user\",\"patchAsObject\":false,\"ignoredFields\":[\"userName\"],\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"PatchObjectNode\",\"name\":\"Patch Object\",\"collection\":true},\"_outcomes\":[{\"id\":\"PATCHED\",\"displayName\":\"Patched\"},{\"id\":\"FAILURE\",\"displayName\":\"Failed\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-212483341\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "357" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.690Z", - "time": 87, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 87 - } - }, - { - "_id": "c8f431da9beb1756e6a1c114a4a1254e", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/DataStoreDecisionNode/7d1deabe-cd98-49c8-943f-ca12305775f3" - }, - "response": { - "bodySize": 238, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 238, - "text": "{\"_id\":\"7d1deabe-cd98-49c8-943f-ca12305775f3\",\"_rev\":\"869693667\",\"_type\":{\"_id\":\"DataStoreDecisionNode\",\"name\":\"Data Store Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"869693667\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "238" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.691Z", - "time": 117, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 117 - } - }, - { - "_id": "bbcd4125f4b39671fb7233a03d374236", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2083, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/EmailSuspendNode/a3d97b53-e38a-4b24-aed0-a021050eb744" - }, - "response": { - "bodySize": 485, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 485, - "text": "{\"_id\":\"a3d97b53-e38a-4b24-aed0-a021050eb744\",\"_rev\":\"-1059437256\",\"emailSuspendMessage\":{\"en\":\"An email has been sent to your address, please verify your email address to update your password. Click the link in that email to proceed.\"},\"emailTemplateName\":\"updatePassword\",\"identityAttribute\":\"userName\",\"emailAttribute\":\"mail\",\"objectLookup\":true,\"_type\":{\"_id\":\"EmailSuspendNode\",\"name\":\"Email Suspend Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1059437256\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "485" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.692Z", - "time": 96, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 96 - } - }, - { - "_id": "184a831caea9d09487ea5999af5a425d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/PageNode/d018fcd1-4e22-4160-8c41-63bee51c9cb3" - }, - "response": { - "bodySize": 396, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 396, - "text": "{\"_id\":\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\",\"_rev\":\"-1359533036\",\"nodes\":[{\"_id\":\"21a99653-a7a7-47ee-b650-f493a84bba09\",\"nodeType\":\"ValidatedPasswordNode\",\"displayName\":\"Platform Password\"}],\"pageDescription\":{\"en\":\"Enter new password\"},\"pageHeader\":{\"en\":\"Update Password\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1359533036\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "396" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.694Z", - "time": 95, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 95 - } - }, - { - "_id": "9f40ed97d427e6ba35e004658bba2bb5", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2082, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/SessionDataNode/d1b79744-493a-44fe-bc26-7d324a8caa4e" - }, - "response": { - "bodySize": 256, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 256, - "text": "{\"_id\":\"d1b79744-493a-44fe-bc26-7d324a8caa4e\",\"_rev\":\"-716667889\",\"sessionDataKey\":\"UserToken\",\"sharedStateKey\":\"userName\",\"_type\":{\"_id\":\"SessionDataNode\",\"name\":\"Get Session Data\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-716667889\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "256" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.695Z", - "time": 110, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 110 - } - }, - { - "_id": "8b3e70e6f278e2799e7e63e7443a12be", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ValidatedPasswordNode/fe2962fc-4db3-4066-8624-553649afc438" - }, - "response": { - "bodySize": 258, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 258, - "text": "{\"_id\":\"fe2962fc-4db3-4066-8624-553649afc438\",\"_rev\":\"875005143\",\"passwordAttribute\":\"password\",\"validateInput\":false,\"_type\":{\"_id\":\"ValidatedPasswordNode\",\"name\":\"Platform Password\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"875005143\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "258" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.813Z", - "time": 56, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 56 - } - }, - { - "_id": "e017c9dd1645eb9b4e8483a64051cc0b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/alpha/realm-config/authentication/authenticationtrees/nodes/ValidatedPasswordNode/21a99653-a7a7-47ee-b650-f493a84bba09" - }, - "response": { - "bodySize": 257, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 257, - "text": "{\"_id\":\"21a99653-a7a7-47ee-b650-f493a84bba09\",\"_rev\":\"688403743\",\"passwordAttribute\":\"password\",\"validateInput\":true,\"_type\":{\"_id\":\"ValidatedPasswordNode\",\"name\":\"Platform Password\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"688403743\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "257" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.814Z", - "time": 66, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 66 - } - }, - { - "_id": "38c469464bdb5600f5a32eab5a4dfe19", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2012, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/saml2?_queryFilter=true" - }, - "response": { - "bodySize": 138, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 138, - "text": "{\"result\":[],\"resultCount\":0,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":0,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "138" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:08 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 766, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.885Z", - "time": 67, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 67 - } - }, - { - "_id": "7995dd5d12df676dbcf84bf13b21c14c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2032, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/federation/circlesoftrust?_queryFilter=true" - }, - "response": { - "bodySize": 138, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 138, - "text": "{\"result\":[],\"resultCount\":0,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "138" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:09 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 766, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:08.959Z", - "time": 66, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 66 - } - }, - { - "_id": "45f82a50d0207a8ef0dc17898238ac9f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2034, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/agents/IdentityGatewayAgent?_queryFilter=true" - }, - "response": { - "bodySize": 138, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 138, - "text": "{\"result\":[],\"resultCount\":0,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":0,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "138" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:09 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 766, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:09.031Z", - "time": 68, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 68 - } - }, - { - "_id": "07ee67506de929111db142bb55cd94ea", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2023, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/agents/J2EEAgent?_queryFilter=true" - }, - "response": { - "bodySize": 138, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 138, - "text": "{\"result\":[],\"resultCount\":0,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":0,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "138" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:09 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 766, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:09.032Z", - "time": 66, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 66 - } - }, - { - "_id": "7f0f3150395a92c67f56a90159079158", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2022, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/agents/WebAgent?_queryFilter=true" - }, - "response": { - "bodySize": 138, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 138, - "text": "{\"result\":[],\"resultCount\":0,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":0,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "138" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:09 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 766, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:09.033Z", - "time": 63, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 63 - } - }, - { - "_id": "b1ddc9a58245794c39cbeb2f26388100", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2008, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/oauth-oidc" - }, - "response": { - "bodySize": 8674, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 8674, - "text": "{\"_id\":\"\",\"_rev\":\"-1364615819\",\"advancedOIDCConfig\":{\"supportedRequestParameterEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"authorisedOpenIdConnectSSOClients\":[],\"supportedUserInfoEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"supportedAuthorizationResponseEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"supportedTokenIntrospectionResponseEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"useForceAuthnForPromptLogin\":false,\"useForceAuthnForMaxAge\":false,\"alwaysAddClaimsToToken\":true,\"supportedTokenIntrospectionResponseSigningAlgorithms\":[\"PS384\",\"RS384\",\"EdDSA\",\"ES384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedTokenEndpointAuthenticationSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedRequestParameterSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"includeAllKtyAlgCombinationsInJwksUri\":false,\"amrMappings\":{},\"loaMapping\":{},\"authorisedIdmDelegationClients\":[],\"idTokenInfoClientAuthenticationEnabled\":true,\"storeOpsTokens\":true,\"supportedUserInfoSigningAlgorithms\":[\"ES384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\"],\"supportedAuthorizationResponseSigningAlgorithms\":[\"PS384\",\"RS384\",\"EdDSA\",\"ES384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedUserInfoEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"claimsParameterSupported\":false,\"supportedTokenIntrospectionResponseEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"supportedAuthorizationResponseEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"supportedRequestParameterEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"ECDH-ES+A128KW\",\"RSA-OAEP\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"defaultACR\":[]},\"advancedOAuth2Config\":{\"passwordGrantAuthService\":\"Login\",\"includeClientIdClaimInStatelessTokens\":true,\"tokenCompressionEnabled\":false,\"tokenEncryptionEnabled\":false,\"requirePushedAuthorizationRequests\":false,\"tlsCertificateBoundAccessTokensEnabled\":true,\"includeSubnameInTokenClaims\":true,\"defaultScopes\":[\"address\",\"phone\",\"openid\",\"profile\",\"email\"],\"moduleMessageEnabledInPasswordGrant\":false,\"allowClientCredentialsInTokenRequestQueryParameters\":true,\"supportedSubjectTypes\":[\"public\",\"pairwise\"],\"refreshTokenGracePeriod\":0,\"tlsClientCertificateHeaderFormat\":\"URLENCODED_PEM\",\"hashSalt\":\"&{am.oidc.client.subject.identifier.hash.salt}\",\"macaroonTokenFormat\":\"V2\",\"maxAgeOfRequestObjectNbfClaim\":0,\"tlsCertificateRevocationCheckingEnabled\":false,\"nbfClaimRequiredInRequestObject\":false,\"requestObjectProcessing\":\"OIDC\",\"maxDifferenceBetweenRequestObjectNbfAndExp\":0,\"responseTypeClasses\":[\"code|org.forgerock.oauth2.core.AuthorizationCodeResponseTypeHandler\",\"device_code|org.forgerock.oauth2.core.TokenResponseTypeHandler\",\"token|org.forgerock.oauth2.core.TokenResponseTypeHandler\",\"id_token|org.forgerock.openidconnect.IdTokenResponseTypeHandler\"],\"expClaimRequiredInRequestObject\":false,\"tokenValidatorClasses\":[\"urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.idtoken.OidcIdTokenValidator\",\"urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.OAuth2AccessTokenValidator\"],\"tokenSigningAlgorithm\":\"HS256\",\"codeVerifierEnforced\":\"false\",\"displayNameAttribute\":\"cn\",\"tokenExchangeClasses\":[\"urn:ietf:params:oauth:token-type:access_token=>urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.AccessTokenToAccessTokenExchanger\",\"urn:ietf:params:oauth:token-type:id_token=>urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.idtoken.IdTokenToIdTokenExchanger\",\"urn:ietf:params:oauth:token-type:access_token=>urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.AccessTokenToIdTokenExchanger\",\"urn:ietf:params:oauth:token-type:id_token=>urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.idtoken.IdTokenToAccessTokenExchanger\"],\"parRequestUriLifetime\":90,\"allowedAudienceValues\":[],\"persistentClaims\":[],\"supportedScopes\":[\"email|Your email address\",\"openid|\",\"address|Your postal address\",\"phone|Your telephone number(s)\",\"profile|Your personal information\",\"fr:idm:*\",\"am-introspect-all-tokens\"],\"authenticationAttributes\":[\"uid\"],\"grantTypes\":[\"implicit\",\"urn:ietf:params:oauth:grant-type:saml2-bearer\",\"refresh_token\",\"password\",\"client_credentials\",\"urn:ietf:params:oauth:grant-type:device_code\",\"authorization_code\",\"urn:openid:params:grant-type:ciba\",\"urn:ietf:params:oauth:grant-type:uma-ticket\",\"urn:ietf:params:oauth:grant-type:jwt-bearer\"]},\"clientDynamicRegistrationConfig\":{\"dynamicClientRegistrationScope\":\"dynamic_client_registration\",\"allowDynamicRegistration\":false,\"requiredSoftwareStatementAttestedAttributes\":[\"redirect_uris\"],\"dynamicClientRegistrationSoftwareStatementRequired\":false,\"generateRegistrationAccessTokens\":true},\"coreOIDCConfig\":{\"overrideableOIDCClaims\":[],\"oidcDiscoveryEndpointEnabled\":true,\"supportedIDTokenEncryptionMethods\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"supportedClaims\":[],\"supportedIDTokenSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedIDTokenEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"jwtTokenLifetime\":3600},\"coreOAuth2Config\":{\"refreshTokenLifetime\":604800,\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenMayActScript\":\"[Empty]\",\"accessTokenLifetime\":3600,\"macaroonTokensEnabled\":false,\"codeLifetime\":120,\"statelessTokensEnabled\":true,\"usePolicyEngineForScope\":false,\"issueRefreshToken\":true,\"oidcMayActScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true},\"consent\":{\"supportedRcsRequestSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedRcsResponseEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"ECDH-ES+A128KW\",\"RSA-OAEP\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"supportedRcsRequestEncryptionMethods\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"enableRemoteConsent\":false,\"supportedRcsRequestEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"clientsCanSkipConsent\":true,\"supportedRcsResponseSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedRcsResponseEncryptionMethods\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"]},\"deviceCodeConfig\":{\"deviceUserCodeLength\":8,\"deviceCodeLifetime\":300,\"deviceUserCodeCharacterSet\":\"234567ACDEFGHJKLMNPQRSTWXYZabcdefhijkmnopqrstwxyz\",\"devicePollInterval\":5},\"pluginsConfig\":{\"evaluateScopeClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"validateScopeScript\":\"[Empty]\",\"accessTokenEnricherClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"oidcClaimsPluginType\":\"SCRIPTED\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"authorizeEndpointDataProviderPluginType\":\"JAVA\",\"userCodeGeneratorClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultUserCodeGenerator\",\"evaluateScopeScript\":\"[Empty]\",\"oidcClaimsClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"evaluateScopePluginType\":\"JAVA\",\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"accessTokenModifierClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"accessTokenModificationScript\":\"21138ab1-0621-4466-b18f-670bfcbabca7\",\"validateScopePluginType\":\"JAVA\",\"accessTokenModificationPluginType\":\"SCRIPTED\",\"oidcClaimsScript\":\"3e31996b-4522-44a2-b360-0851cece3854\",\"validateScopeClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\"},\"cibaConfig\":{\"cibaMinimumPollingInterval\":2,\"supportedCibaSigningAlgorithms\":[\"ES256\",\"PS256\"],\"cibaAuthReqIdLifetime\":600},\"_type\":{\"_id\":\"oauth-oidc\",\"name\":\"OAuth2 Provider\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1364615819\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:09 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 794, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:09.104Z", - "time": 66, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 66 - } - }, - { - "_id": "849a20263d4b6857e18458ea8a99adff", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2026, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/agents/OAuth2Client?_queryFilter=true" - }, - "response": { - "bodySize": 11602, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 11602, - "text": "{\"result\":[{\"_id\":\"RCSClient\",\"_rev\":\"104376878\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"1f389a3d-21cf-417c-a6d3-42ea620071f0\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"SCRIPTED\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"SCRIPTED\",\"providerOverridesEnabled\":true,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":true,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"oidcClaimsClass\":null,\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"accessTokenModifierClass\":null,\"customLoginUrlTemplate\":null,\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":true,\"accessTokenModificationScript\":\"c234ba0b-58a1-4cfd-9567-09edde980745\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"code\",\"token\",\"id_token\",\"code token\",\"token id_token\",\"code id_token\",\"code token id_token\",\"device_code\",\"device_code id_token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":false,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"client_credentials\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":\"http://am.fr-platform:80/am/oauth2/connect/jwk_uri\",\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":0,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"status\":\"Active\",\"clientName\":[],\"clientType\":\"Confidential\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"agentgroup\":null,\"refreshTokenLifetime\":0,\"scopes\":[\"fr:idm:*\"],\"accessTokenLifetime\":0,\"redirectionUris\":[],\"authorizationCodeLifetime\":0},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"testclient\",\"_rev\":\"123296491\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"oidcClaimsClass\":null,\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"accessTokenModifierClass\":null,\"customLoginUrlTemplate\":null,\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"code\",\"token\",\"id_token\",\"code token\",\"token id_token\",\"code id_token\",\"code token id_token\",\"device_code\",\"device_code id_token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":false,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"authorization_code\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":0,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"status\":\"Active\",\"clientName\":[],\"clientType\":\"Confidential\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"agentgroup\":null,\"refreshTokenLifetime\":0,\"scopes\":[\"email\",\"openid\",\"profile\"],\"accessTokenLifetime\":0,\"redirectionUris\":[],\"authorizationCodeLifetime\":0},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}},{\"_id\":\"testapp\",\"_rev\":\"-714932155\",\"overrideOAuth2ClientConfig\":{\"issueRefreshToken\":true,\"validateScopePluginType\":\"PROVIDER\",\"tokenEncryptionEnabled\":false,\"evaluateScopePluginType\":\"PROVIDER\",\"oidcMayActScript\":\"[Empty]\",\"oidcClaimsScript\":\"[Empty]\",\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenModificationPluginType\":\"PROVIDER\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultEndpointDataProvider\",\"useForceAuthnForMaxAge\":false,\"oidcClaimsPluginType\":\"PROVIDER\",\"providerOverridesEnabled\":false,\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"statelessTokensEnabled\":false,\"authorizeEndpointDataProviderPluginType\":\"PROVIDER\",\"oidcClaimsClass\":null,\"remoteConsentServiceId\":null,\"enableRemoteConsent\":false,\"validateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeValidator\",\"accessTokenModifierClass\":null,\"customLoginUrlTemplate\":null,\"usePolicyEngineForScope\":false,\"evaluateScopeClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultScopeEvaluator\",\"overrideableOIDCClaims\":[],\"accessTokenMayActScript\":\"[Empty]\",\"evaluateScopeScript\":\"[Empty]\",\"clientsCanSkipConsent\":false,\"accessTokenModificationScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true,\"validateScopeScript\":\"[Empty]\"},\"advancedOAuth2ClientConfig\":{\"logoUri\":[],\"subjectType\":\"public\",\"clientUri\":[],\"tokenExchangeAuthLevel\":0,\"responseTypes\":[\"code\",\"token\",\"id_token\",\"code token\",\"token id_token\",\"code id_token\",\"code token id_token\",\"device_code\",\"device_code id_token\"],\"mixUpMitigation\":false,\"customProperties\":[],\"javascriptOrigins\":[],\"policyUri\":[],\"softwareVersion\":null,\"sectorIdentifierUri\":null,\"tosURI\":[],\"tokenEndpointAuthMethod\":\"client_secret_basic\",\"isConsentImplied\":false,\"refreshTokenGracePeriod\":0,\"softwareIdentity\":null,\"grantTypes\":[\"authorization_code\"],\"require_pushed_authorization_requests\":false,\"descriptions\":[\"Test App\"],\"requestUris\":[],\"name\":[],\"contacts\":[],\"updateAccessToken\":null},\"signEncOAuth2ClientConfig\":{\"tokenEndpointAuthSigningAlgorithm\":\"RS256\",\"idTokenEncryptionEnabled\":false,\"tokenIntrospectionEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\",\"requestParameterSignedAlg\":null,\"authorizationResponseSigningAlgorithm\":\"RS256\",\"clientJwtPublicKey\":null,\"idTokenPublicEncryptionKey\":null,\"mTLSSubjectDN\":null,\"jwkStoreCacheMissCacheTime\":60000,\"jwkSet\":null,\"idTokenEncryptionMethod\":\"A128CBC-HS256\",\"jwksUri\":null,\"tokenIntrospectionEncryptedResponseAlg\":\"RSA-OAEP-256\",\"authorizationResponseEncryptionMethod\":null,\"mTLSCertificateBoundAccessTokens\":false,\"userinfoResponseFormat\":\"JSON\",\"publicKeyLocation\":\"jwks_uri\",\"tokenIntrospectionResponseFormat\":\"JSON\",\"requestParameterEncryptedEncryptionAlgorithm\":\"A128CBC-HS256\",\"userinfoSignedResponseAlg\":null,\"idTokenEncryptionAlgorithm\":\"RSA-OAEP-256\",\"requestParameterEncryptedAlg\":null,\"authorizationResponseEncryptionAlgorithm\":null,\"mTLSTrustedCert\":null,\"jwksCacheTimeout\":3600000,\"userinfoEncryptedResponseAlg\":null,\"idTokenSignedResponseAlg\":\"RS256\",\"tokenIntrospectionSignedResponseAlg\":\"RS256\",\"userinfoEncryptedResponseEncryptionAlgorithm\":\"A128CBC-HS256\"},\"coreOpenIDClientConfig\":{\"claims\":[],\"backchannel_logout_uri\":null,\"defaultAcrValues\":[],\"jwtTokenLifetime\":0,\"defaultMaxAgeEnabled\":false,\"clientSessionUri\":null,\"defaultMaxAge\":600,\"postLogoutRedirectUri\":[],\"backchannel_logout_session_required\":false},\"coreOAuth2ClientConfig\":{\"status\":\"Active\",\"clientName\":[\"testapp\"],\"clientType\":\"Confidential\",\"loopbackInterfaceRedirection\":false,\"defaultScopes\":[],\"agentgroup\":null,\"refreshTokenLifetime\":0,\"scopes\":[],\"accessTokenLifetime\":0,\"redirectionUris\":[],\"authorizationCodeLifetime\":0},\"coreUmaClientConfig\":{\"claimsRedirectionUris\":[]},\"_type\":{\"_id\":\"OAuth2Client\",\"name\":\"OAuth2 Clients\",\"collection\":true}}],\"resultCount\":3,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":3,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0, resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:09 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 800, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:09.175Z", - "time": 71, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 71 - } - }, - { - "_id": "a74dffe16837abb91a1a0f33d6283527", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1990, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication" - }, - "response": { - "bodySize": 1364, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1364, - "text": "{\"_id\":\"\",\"_rev\":\"-861746544\",\"postauthprocess\":{\"usernameGeneratorClass\":\"com.sun.identity.authentication.spi.DefaultUserIDGenerator\",\"usernameGeneratorEnabled\":true,\"loginPostProcessClass\":[],\"loginSuccessUrl\":[\"/enduser/?realm=/bravo\"],\"userAttributeSessionMapping\":[],\"loginFailureUrl\":[]},\"security\":{\"zeroPageLoginEnabled\":false,\"zeroPageLoginReferrerWhiteList\":[],\"zeroPageLoginAllowedWithoutReferrer\":true,\"moduleBasedAuthEnabled\":false,\"sharedSecret\":{\"$string\":\"&{am.authentication.shared.secret}\"},\"addClearSiteDataHeader\":true,\"keyAlias\":\"test\"},\"trees\":{\"suspendedAuthenticationTimeout\":1440,\"authenticationSessionsStateManagement\":\"JWT\",\"authenticationSessionsMaxDuration\":15,\"authenticationTreeCookieHttpOnly\":true,\"authenticationSessionsWhitelist\":false},\"accountlockout\":{\"loginFailureLockoutMode\":false,\"storeInvalidAttemptsInDataStore\":true,\"lockoutDuration\":0,\"lockoutDurationMultiplier\":1,\"lockoutWarnUserCount\":0,\"loginFailureCount\":5,\"loginFailureDuration\":300},\"core\":{\"adminAuthModule\":\"Login\",\"orgConfig\":\"Login\"},\"general\":{\"userStatusCallbackPlugins\":[],\"statelessSessionsEnabled\":false,\"locale\":\"en_US\",\"twoFactorRequired\":false,\"identityType\":[\"agent\",\"user\"],\"defaultAuthLevel\":0},\"userprofile\":{\"dynamicProfileCreation\":\"false\",\"defaultRole\":[],\"aliasAttributeName\":[\"uid\"]},\"_type\":{\"_id\":\"EMPTY\",\"name\":\"Core\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-861746544\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1364" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:09 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:09.254Z", - "time": 63, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 63 - } - }, - { - "_id": "00f9fcfff46b8e39d31bfb7b8ae67dea", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 2, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "content-length", - "value": "2" - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2065, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{}" - }, - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/SocialIdentityProviders?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:09 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:09.323Z", - "time": 105, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 105 - } - }, - { - "_id": "8660f1b9b875b7954f454b0d59b99139", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "resource=2.1" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1989, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/policies?_queryFilter=true" - }, - "response": { - "bodySize": 137, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 137, - "text": "{\"result\":[],\"resultCount\":0,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=2.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "137" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:09 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 766, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:09.495Z", - "time": 64, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 64 - } - }, - { - "_id": "9c38ee789f72092e597709a420fa30bb", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=1.0,resource=2.1" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2079, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_sortKeys", - "value": "name" - }, - { - "name": "_queryFilter", - "value": "name eq \"^(?!sunAMDelegationService$).*\"" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/applications?_sortKeys=name&_queryFilter=name%20eq%20%22%5E%28%3F%21sunAMDelegationService%24%29.%2A%22" - }, - "response": { - "bodySize": 1070, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1070, - "text": "{\"result\":[{\"resourceTypeUuids\":[\"d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b\"],\"name\":\"oauth2Scopes\",\"displayName\":\"Default OAuth2 Scopes Policy Set\",\"description\":\"The built-in Application used by the OAuth2 scope authorization process.\",\"attributeNames\":[],\"createdBy\":\"id=dsameuser,ou=user,ou=am-config\",\"conditions\":[\"Script\",\"AMIdentityMembership\",\"IPv6\",\"SimpleTime\",\"IPv4\",\"LEAuthLevel\",\"LDAPFilter\",\"AuthScheme\",\"Session\",\"AND\",\"AuthenticateToRealm\",\"ResourceEnvIP\",\"SessionProperty\",\"OAuth2Scope\",\"OR\",\"Transaction\",\"NOT\",\"AuthLevel\",\"AuthenticateToService\"],\"subjects\":[\"AuthenticatedUsers\",\"NOT\",\"Identity\",\"OR\",\"AND\",\"NONE\",\"JwtClaim\"],\"editable\":true,\"resourceComparator\":null,\"applicationType\":\"iPlanetAMWebAgentService\",\"entitlementCombiner\":\"DenyOverride\",\"lastModifiedDate\":1728915520061,\"creationDate\":1578580064992,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"saveIndex\":null,\"searchIndex\":null}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=1.0,resource=2.1, resource=2.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1070" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:09 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 794, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:09.569Z", - "time": 72, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 72 - } - }, - { - "_id": "03a4f53c6da8df80aef837012d1132b0", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=1.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2078, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_sortKeys", - "value": "name" - }, - { - "name": "_queryFilter", - "value": "name eq \"^(?!Delegation Service$).*\"" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/resourcetypes?_sortKeys=name&_queryFilter=name%20eq%20%22%5E%28%3F%21Delegation%20Service%24%29.%2A%22" - }, - "response": { - "bodySize": 1019, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1019, - "text": "{\"result\":[{\"uuid\":\"d60b7a71-1dc6-44a5-8e48-e4b9d92dee8b\",\"name\":\"OAuth2 Scope\",\"description\":\"The built-in OAuth2 Scope Resource Type for OAuth2policy-provided scope.\",\"patterns\":[\"*://*:*/*\",\"*://*:*/*?*\",\"*\"],\"actions\":{\"GRANT\":true},\"createdBy\":\"id=dsameuser,ou=user,ou=am-config\",\"creationDate\":1595479030586,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":1728915518398},{\"uuid\":\"76656a38-5f8e-401b-83aa-4ccb74ce88d2\",\"name\":\"URL\",\"description\":\"The built-in URL Resource Type available to OpenAMPolicies.\",\"patterns\":[\"*://*:*/*\",\"*://*:*/*?*\"],\"actions\":{\"HEAD\":true,\"DELETE\":true,\"POST\":true,\"GET\":true,\"OPTIONS\":true,\"PUT\":true,\"PATCH\":true},\"createdBy\":\"id=dsameuser,ou=user,ou=am-config\",\"creationDate\":1595479030487,\"lastModifiedBy\":\"id=7a031a92-f70d-4b30-9d70-da7cfb1d9c93,ou=user,ou=am-config\",\"lastModifiedDate\":1728915519107}],\"resultCount\":2,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=1.0,resource=1.0, resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1019" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:09 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 794, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:09.646Z", - "time": 75, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 75 - } - }, - { - "_id": "c61049fdf2e1e620aec9dce3bf50f028", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2001, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/scripts?_queryFilter=true" - }, - "response": { - "bodySize": 427109, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 427109, - "text": "{\"result\":[{\"_id\":\"ca0c39c5-9c50-417f-a36e-815cfd1ecffe\",\"name\":\"Full Verification Results\",\"description\":\"Show full identity verification results\",\"script\":\"LyogRnVsbCBWZXJpZmljYXRpb24gUmVzdWx0cwogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBTaG93IGZ1bGwgaWRlbnRpdHkgdmVyaWZpY2F0aW9uIHJlc3VsdHMKICogCiAqIFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgbWF5IG5vdCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICovCihmdW5jdGlvbiAoKSB7CiAgb3V0Y29tZSA9ICd0cnVlJzsKCiAgdmFyIHAxVXNlcklkQW1BdHRyID0gJ2ZyLWF0dHItaXN0cjEnOwogIHZhciBwMVVzZXJJZElkbUF0dHIgPSAnZnJJbmRleGVkU3RyaW5nMSc7CiAgdmFyIHNlbGZpZUFtQXR0ciA9ICdmci1hdHRyLXN0cjEnOwogIHZhciBzZWxmaWVJZG1BdHRyID0gJ2ZyVW5pbmRleGVkU3RyaW5nMSc7CiAgdmFyIHBvcnRyYWl0QW1BdHRyID0gJ2ZyLWF0dHItc3RyMic7CiAgdmFyIHBvcnRyYWl0SWRtQXR0ciA9ICdmclVuaW5kZXhlZFN0cmluZzInOwogIHZhciBmaXJzdE5hbWVBdHRyID0gJ2dpdmVuTmFtZSc7CiAgdmFyIGxhc3ROYW1lQXR0ciA9ICdzbic7CiAgdmFyIG1ldGFEYXRhQW1BdHRyID0gJ2ZyLWF0dHItc3RyMyc7CiAgdmFyIG1ldGFEYXRhSWRtQXR0ciA9ICdmclVuaW5kZXhlZFN0cmluZzMnOwogIHZhciBjdXN0b21JZG1BdHRycyA9ICdmci1pZG0tY3VzdG9tLWF0dHJzJzsKICB2YXIgdmVyaWZpZWRGaXJzdE5hbWVBdHRyID0gJ2N1c3RvbV92ZXJpZmllZEZpcnN0TmFtZSc7CiAgdmFyIHZlcmlmaWVkTGFzdE5hbWVBdHRyID0gJ2N1c3RvbV92ZXJpZmllZExhc3ROYW1lJzsKICB2YXIgdmVyaWZ5U3RhdHVzQXR0ciA9ICdjdXN0b21fdmVyaWZ5U3RhdHVzJzsKICAKICB2YXIgaWRlbnRpdHkgPSBpZFJlcG9zaXRvcnkuZ2V0SWRlbnRpdHkobm9kZVN0YXRlLmdldCgnX2lkJykpOwogIHZhciBwMVVzZXJJZCA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZVZhbHVlcyhwMVVzZXJJZEFtQXR0cilbMF07CiAgdmFyIHNlbGZpZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZVZhbHVlcyhzZWxmaWVBbUF0dHIpWzBdOwogIHZhciBwb3J0cmFpdCA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZVZhbHVlcyhwb3J0cmFpdEFtQXR0cilbMF07CiAgdmFyIGZpcnN0TmFtZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZVZhbHVlcyhmaXJzdE5hbWVBdHRyKVswXTsKICB2YXIgbGFzdE5hbWUgPSBpZGVudGl0eS5nZXRBdHRyaWJ1dGVWYWx1ZXMobGFzdE5hbWVBdHRyKVswXTsKICB2YXIgbWV0YURhdGEgPSBKU09OLnBhcnNlKGlkZW50aXR5LmdldEF0dHJpYnV0ZVZhbHVlcyhtZXRhRGF0YUFtQXR0cilbMF0pOwogIHZhciBjdXN0b21BdHRycyA9IEpTT04ucGFyc2UoaWRlbnRpdHkuZ2V0QXR0cmlidXRlVmFsdWVzKGN1c3RvbUlkbUF0dHJzKVswXSk7CgogIHZhciBhbmNob3IgPSAnYW5jaG9yLScuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgdmFyIGhhbGlnbiA9ICdsZWZ0JzsKICB2YXIgcmVmZXJlbmNlSW1hZ2UgPSAnPGltZyBzcmM9ImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsICcrcG9ydHJhaXQrJyIgYWx0PSJSZWZlcmVuY2UgSW1hZ2UiIHN0eWxlPSJoZWlnaHQ6IGF1dG87IHdpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb3ZlciIgLz4nOwogIHZhciBmcmVzaFNlbGZpZUltZyA9ICc8aW1nIHNyYz0iZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwgJytzZWxmaWUrJyIgYWx0PSJGcmVzaCBTZWxmaWUiIHN0eWxlPSJoZWlnaHQ6IGF1dG87IHdpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb3ZlciIgLz4nOwogIHZhciBmaXJzdE5hbWVNYXRjaCA9IGdldEJpb2dyYXBoaWNNYXRjaFJlc3VsdChtZXRhRGF0YSwgJ2dpdmVuX25hbWUnKTsKICB2YXIgbGFzdE5hbWVNYXRjaCA9IGdldEJpb2dyYXBoaWNNYXRjaFJlc3VsdChtZXRhRGF0YSwgJ2ZhbWlseV9uYW1lJyk7CiAgdmFyIGlkZW50aXR5VGFibGUgPSBgXAogICAgICA8dGFibGUgc3R5bGU9IndpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluIj5cCiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDI1JTsgdGV4dC1hbGlnbjogcmlnaHQ7Ij5JZGVudGlmaWVyPC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiAyJTsiPjwvdGQ+XAogICAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDogMjUlOyB0ZXh0LWFsaWduOiBsZWZ0OyI+QXBwbGljYXRpb248L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDMwJTsgdGV4dC1hbGlnbjogbGVmdDsiPkdvdmVybm1lbnQgSUQ8L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDE4JTsgdGV4dC1hbGlnbjogbGVmdDsiPk1hdGNoPC90ZD5cCiAgICAgICAgPC90cj5cCiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij5GaXJzdCBOYW1lPC90ZD5cCiAgICAgICAgICA8dGQ+OjwvdGQ+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+JHtmaXJzdE5hbWV9PC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij4ke2N1c3RvbUF0dHJzW3ZlcmlmaWVkRmlyc3ROYW1lQXR0cl19PC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7ICR7Y29sb3JpemUoZmlyc3ROYW1lTWF0Y2gpfSI+JHtmaXJzdE5hbWVNYXRjaH08L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPkxhc3QgTmFtZTwvdGQ+XAogICAgICAgICAgPHRkPjo8L3RkPlwKICAgICAgICAgIDx0ZD4ke2xhc3ROYW1lfTwvdGQ+XAogICAgICAgICAgPHRkPiR7Y3VzdG9tQXR0cnNbdmVyaWZpZWRMYXN0TmFtZUF0dHJdfTwvdGQ+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyAke2NvbG9yaXplKGxhc3ROYW1lTWF0Y2gpfSI+JHtsYXN0TmFtZU1hdGNofTwvdGQ+XAogICAgICAgIDwvdHI+XAogICAgICA8L3RhYmxlPmA7CiAgdmFyIGRvY1N0cnVjdEpkZ21udCA9IGdldE1pdGVrUmVzdWx0KG1ldGFEYXRhLCAnRG9jdW1lbnQgU3RydWN0dXJlJykuanVkZ2VtZW50OwogIHZhciBkb2NEYXRhQ29tcEpkZ21udCA9IGdldE1pdGVrUmVzdWx0KG1ldGFEYXRhLCAnRG9jdW1lbnQgRGF0YSBDb21wYXJpc29uJykuanVkZ2VtZW50OwogIHZhciBodW1hbkZhY2VKZGdtbnQgPSBnZXRNaXRla1Jlc3VsdChtZXRhRGF0YSwgJ0h1bWFuIEZhY2UgUHJlc2VuY2UnKS5qdWRnZW1lbnQKICB2YXIgZmllbGRWYWxpZEpkZ21udCA9IGdldE1pdGVrUmVzdWx0KG1ldGFEYXRhLCAnRmllbGQgVmFsaWRhdGlvbicpLmp1ZGdlbWVudDsKICB2YXIgYmxhY2tsaXN0SmRnbW50ID0gZ2V0TWl0ZWtSZXN1bHQobWV0YURhdGEsICdJRCBEb2N1bWVudCBCbGFja2xpc3QnKS5qdWRnZW1lbnQ7CiAgdmFyIGJhcmNvZGVKZGdtbnQgPSBnZXRNaXRla1Jlc3VsdChtZXRhRGF0YSwgJ0JhcmNvZGUgQW5hbHlzaXMnKS5qdWRnZW1lbnQ7CiAgdmFyIGdvdkRvY1RhYmxlID0gYFwKICAgICAgPHRhYmxlIHN0eWxlPSJ3aWR0aDogMTAwJTsgb2JqZWN0LWZpdDogY29udGFpbiI+XAogICAgICAgIDx0cj5cCiAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiA0OSU7IHRleHQtYWxpZ246IHJpZ2h0OyI+RG9jdW1lbnQgU3RydWN0dXJlPC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiAyJTsiPjo8L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDQ5JTsgdGV4dC1hbGlnbjogbGVmdDsgJHtjb2xvcml6ZShkb2NTdHJ1Y3RKZGdtbnQpfSI+JHtkb2NTdHJ1Y3RKZGdtbnR9PC90ZD5cCiAgICAgICAgPC90cj5cCiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij5Eb2N1bWVudCBEYXRhIENvbXBhcmlzb248L3RkPlwKICAgICAgICAgIDx0ZD46PC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9IiR7Y29sb3JpemUoZG9jRGF0YUNvbXBKZGdtbnQpfSI+JHtkb2NEYXRhQ29tcEpkZ21udH08L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPkh1bWFuIEZhY2UgUHJlc2VuY2U8L3RkPlwKICAgICAgICAgIDx0ZD46PC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9IiR7Y29sb3JpemUoaHVtYW5GYWNlSmRnbW50KX0iPiR7aHVtYW5GYWNlSmRnbW50fTwvdGQ+XAogICAgICAgIDwvdHI+XAogICAgICAgIDx0cj5cCiAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+RmllbGQgVmFsaWRhdGlvbjwvdGQ+XAogICAgICAgICAgPHRkPjo8L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0iJHtjb2xvcml6ZShmaWVsZFZhbGlkSmRnbW50KX0iPiR7ZmllbGRWYWxpZEpkZ21udH08L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPklEIERvY3VtZW50IEJsYWNrbGlzdDwvdGQ+XAogICAgICAgICAgPHRkPjo8L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0iJHtjb2xvcml6ZShibGFja2xpc3RKZGdtbnQpfSI+JHtibGFja2xpc3RKZGdtbnR9PC90ZD5cCiAgICAgICAgPC90cj5cCiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij5CYXJjb2RlIEFuYWx5c2lzPC90ZD5cCiAgICAgICAgICA8dGQ+OjwvdGQ+XAogICAgICAgICAgPHRkIHN0eWxlPSIke2NvbG9yaXplKGJhcmNvZGVKZGdtbnQpfSI+JHtiYXJjb2RlSmRnbW50fTwvdGQ+XAogICAgICAgIDwvdHI+XAogICAgICA8L3RhYmxlPmA7CiAgdmFyIHNpbWlsYXJpdHkgPSBnZXRTaW1pbGFyaXR5KGdldFJlc3VsdChtZXRhRGF0YSwgJ0ZBQ0lBTF9DT01QQVJJU09OJykuZGF0YS5zaW1pbGFyaXR5KTsKICB2YXIgbGl2ZW5lc3MgPSBnZXRMaXZlbmVzcyhnZXRSZXN1bHQobWV0YURhdGEsICdMSVZFTkVTUycpLmRhdGEucHJvYmFiaWxpdHkpOwogIHZhciBmYWNpYWxUYWJsZSA9IGBcCiAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW4iPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDogNDklOyB0ZXh0LWFsaWduOiByaWdodDsiPkZhY2lhbCBDb21wYXJpc29uPC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiAyJTsiPjo8L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDQ5JTsgdGV4dC1hbGlnbjogbGVmdDsgJHtjb2xvcml6ZShzaW1pbGFyaXR5KX0iPiR7c2ltaWxhcml0eX08L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPkxpdmVuZXNzPC90ZD5cCiAgICAgICAgICA8dGQ+OjwvdGQ+XAogICAgICAgICAgPHRkIHN0eWxlPSIke2NvbG9yaXplKGxpdmVuZXNzKX0iPiR7bGl2ZW5lc3N9PC90ZD5cCiAgICAgICAgPC90cj5cCiAgICAgIDwvdGFibGU+YDsKICB2YXIgc2VsZmllVGFibGUgPSBgXAogICAgICA8dGFibGUgc3R5bGU9IndpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluIj5cCiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+PGg0PkdvdmVybm1lbnQgSUQgUGljdHVyZTwvaDQ+PC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxoND5GcmVzaCBTZWxmaWU8L2g0PjwvdGQ+XAogICAgICAgIDwvdHI+XAogICAgICAgIDx0ciBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDUwJTsiPiR7cmVmZXJlbmNlSW1hZ2V9PC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiA1MCU7Ij4ke2ZyZXNoU2VsZmllSW1nfTwvdGQ+XAogICAgICAgIDwvdHI+XAogICAgICA8L3RhYmxlPmA7CiAgdmFyIG1lc3NhZ2UgPSBgXAogICAgICA8cD48aDMgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPlN0YXR1czwvaDM+PC9wPlwKICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgJHtjb2xvcml6ZShjdXN0b21BdHRyc1t2ZXJpZnlTdGF0dXNBdHRyXSl9Ij4ke2N1c3RvbUF0dHJzW3ZlcmlmeVN0YXR1c0F0dHJdfTwvcD5cCiAgICAgIDxwPjxoMyBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+SWRlbnRpdHk8L2gzPjwvcD5cCiAgICAgICR7aWRlbnRpdHlUYWJsZX1cCiAgICAgIDxwPjxoMyBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+R292ZXJubWVudCBJRCBBdXRoZW50aWNhdGlvbjwvaDM+PC9wPlwKICAgICAgJHtnb3ZEb2NUYWJsZX1cCiAgICAgIDxwPjxoMyBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+RmFjaWFsIENvbXBhcmlzb24gJiBMaXZlbmVzczwvaDM+PC9wPlwKICAgICAgJHtmYWNpYWxUYWJsZX1cCiAgICAgIDxici8+JHtzZWxmaWVUYWJsZX1gOwogIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4iLmNvbmNhdCgKICAgICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAgICJmdW5jdGlvbiAoZSkge1xuIikuY29uY2F0KAogICAgIiAgdmFyIG1lc3NhZ2UgPSBlLmZpcnN0RWxlbWVudENoaWxkO1xuIikuY29uY2F0KAogICAgIiAgY29uc29sZS5sb2coJ2hlcmUhJyk7XG4iKS5jb25jYXQoCiAgICAiICBpZiAobWVzc2FnZS5maXJzdENoaWxkICYmIG1lc3NhZ2UuZmlyc3RDaGlsZC5ub2RlTmFtZSA9PSAnI3RleHQnICYmIG1lc3NhZ2UuZmlyc3RDaGlsZC5ub2RlVmFsdWUudHJpbSgpID09ICciKS5jb25jYXQoYW5jaG9yKS5jb25jYXQoIicpIHtcbiIpLmNvbmNhdCgKICAgICIgICAgbWVzc2FnZS5jbGFzc05hbWUgPSBcInRleHQtbGVmdFwiO1xuIikuY29uY2F0KAogICAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICAgIiAgICBtZXNzYWdlLmlubmVySFRNTCA9ICciKS5jb25jYXQobWVzc2FnZSkuY29uY2F0KCInO1xuIikuY29uY2F0KAogICAgIiAgfVxuIikuY29uY2F0KAogICAgIn0pIikKICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgY2FsbGJhY2tzQnVpbGRlci50ZXh0T3V0cHV0Q2FsbGJhY2soMCwgYW5jaG9yKTsKICAgIGNhbGxiYWNrc0J1aWxkZXIuc2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCk7CiAgfSBlbHNlIHsKICAgIGFjdGlvbiA9IGFjdGlvbi5nb1RvKCd0cnVlJyk7CiAgfQoKICBmdW5jdGlvbiBnZXRTaW1pbGFyaXR5KG51bSkgewogICAgaWYgKG51bSA+PSA4NSkgcmV0dXJuICdIaWdoJzsKICAgIGlmIChudW0gPj0gNjUpIHJldHVybiAnTWVkaXVtJzsKICAgIHJldHVybiAnTG93JzsKICB9CgogIGZ1bmN0aW9uIGdldExpdmVuZXNzKG51bSkgewogICAgaWYgKG51bSA+PSAwLjUpIHJldHVybiAnTGl2ZSc7CiAgICByZXR1cm4gJ1Nwb29mZWQnCiAgfQoKICBmdW5jdGlvbiBjb2xvcml6ZSh0ZXh0KSB7CiAgICB2YXIgY29sb3IgPSAnJzsKICAgIHZhciBzdWNjZXNzID0gJ2dyZWVuJzsKICAgIHZhciBzb3NvID0gJ3llbGxvdyc7CiAgICB2YXIgZmFpbHVyZSA9ICdyZWQnOwogICAgdmFyIGNvbG9ycyA9IHsKICAgICAgICAnbm90X2F1dGhlbnRpYyc6IGBjb2xvcjoke2ZhaWx1cmV9O2AsCiAgICAgICAgJ3N1Y2Nlc3MnOiBgY29sb3I6JHtzdWNjZXNzfTtgLAogICAgICAgICdhdXRoZW50aWMnOiBgY29sb3I6JHtzdWNjZXNzfTtgLAogICAgICAgICdsaXZlJzogYGNvbG9yOiR7c3VjY2Vzc307YCwKICAgICAgICAnaGlnaCc6IGBjb2xvcjoke3N1Y2Nlc3N9O2AsCiAgICAgICAgJ21lZGl1bSc6IGBjb2xvcjoke3Nvc299O2AsCiAgICAgICAgJ2ZhaWwnOiBgY29sb3I6JHtmYWlsdXJlfTtgLAogICAgICAgICdsb3cnOiBgY29sb3I6JHtmYWlsdXJlfTtgLAogICAgICAgICdzcG9vZmVkJzogYGNvbG9yOiR7ZmFpbHVyZX07YCwKICAgIH07CiAgICBPYmplY3Qua2V5cyhjb2xvcnMpLmZvckVhY2goKGl0KSA9PiB7CiAgICAgICAgaWYgKHRleHQudG9Mb3dlckNhc2UoKS5pbmRleE9mKGl0KSA+PSAwKSBjb2xvciA9IGNvbG9yc1tpdF07CiAgICAgICAgcmV0dXJuOwogICAgfSk7CiAgICByZXR1cm4gY29sb3I7CiAgfQogICAgCiAgZnVuY3Rpb24gZ2V0UmVzdWx0KG1ldGFEYXRhLCB0eXBlKSB7CiAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgIGlmIChtZXRhRGF0YSAmJiB0eXBlKSB7CiAgICAgIG1ldGFEYXRhLl9lbWJlZGRlZC5tZXRhRGF0YS5mb3JFYWNoKChpdCkgPT4gewogICAgICAgIGlmIChpdC50eXBlID09PSB0eXBlKSB7CiAgICAgICAgICByZXN1bHQgPSBpdDsgCiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogICAgCiAgZnVuY3Rpb24gZ2V0TWl0ZWtSZXN1bHQobWV0YURhdGEsIG5hbWUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgdmFyIG1pdGVrUmVzdWx0cyA9IGdldFJlc3VsdChtZXRhRGF0YSwgJ0RPQ1VNRU5UX0FVVEhFTlRJQ0FUSU9OJyk7CiAgICBpZiAobWl0ZWtSZXN1bHRzICYmIG5hbWUpIHsKICAgICAgbWl0ZWtSZXN1bHRzLmRhdGEubWl0ZWtWZXJpZmljYXRpb25zLmZvckVhY2goKGl0KSA9PiB7CiAgICAgICAgaWYgKGl0Lm5hbWUgPT09IG5hbWUpIHsKICAgICAgICAgIHJlc3VsdCA9IGl0OyAKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgICAKICBmdW5jdGlvbiBnZXRCaW9ncmFwaGljTWF0Y2hSZXN1bHQobWV0YURhdGEsIGZpZWxkKSB7CiAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgIHZhciBiaW9ncmFwaGljTWF0Y2hSZXN1bHQgPSBnZXRSZXN1bHQobWV0YURhdGEsICdCSU9HUkFQSElDX01BVENIJyk7CiAgICBpZiAoYmlvZ3JhcGhpY01hdGNoUmVzdWx0ICYmIGZpZWxkKSB7CiAgICAgIGJpb2dyYXBoaWNNYXRjaFJlc3VsdC5kYXRhLmJpb2dyYXBoaWNfbWF0Y2hfcmVzdWx0cy5mb3JFYWNoKChpdCkgPT4gewogICAgICAgIGlmIChpdC5pZGVudGlmaWVyID09PSBmaWVsZCkgewogICAgICAgICAgcmVzdWx0ID0gaXQubWF0Y2g7IAogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoKICAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICAqCiAgICogRXhhbXBsZToKICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICovCiAgZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbiAoYykgewogICAgICB2YXIgciA9IChNYXRoLnJhbmRvbSgpICogMTApIHwgMDsKICAgICAgdmFyIHYgPSByOwogICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKICB9CgogIC8qCiAgICogUmVhZCBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gZ2V0T2JqZWN0QXR0cmlidXRlKG5hbWUpIHsKICAgIHZhciBhdHRyaWJ1dGVzID0gbm9kZVN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwogICAgaWYgKGF0dHJpYnV0ZXMpIHsKICAgICAgaWYgKGF0dHJpYnV0ZXMuZ2V0KSB7CiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0KG5hbWUpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm5hbWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLyoKICAgKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7CiAgICB2YXIgYXR0cmlidXRlcyA9IG5vZGVTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgIGlmIChhdHRyaWJ1dGVzICYmIHZhbHVlKSB7CiAgICAgIGF0dHJpYnV0ZXMucHV0KG5hbWUsIHZhbHVlKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgib2JqZWN0QXR0cmlidXRlcyIsIGF0dHJpYnV0ZXMpOwogICAgfSBlbHNlIGlmICh2YWx1ZSkgewogICAgICBub2RlU3RhdGUucHV0U2hhcmVkKCJvYmplY3RBdHRyaWJ1dGVzIiwgeyBuYW1lOiB2YWx1ZSB9ICk7CiAgICB9CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"21138ab1-0621-4466-b18f-670bfcbabca7\",\"name\":\"Bravo OAuth2 Access Token Modification Script\",\"description\":\"Default bravo realm script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"73cecbfc-dad0-4395-be6a-6858ee3a80e5\",\"name\":\"Microsoft Profile Normalization\",\"description\":\"Normalizes raw profile data from Microsoft\",\"script\":\"IlwiLypcXG4gKiBDb3B5cmlnaHQgMjAyMCBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcXG4gKlxcbiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuXFxuICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdFxcbiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLlxcbiAqL1xcblxcbi8qXFxue1xcbiAgICBcXFwiQG9kYXRhLmNvbnRleHRcXFwiOiBcXFwiaHR0cHM6Ly9ncmFwaC5taWNyb3NvZnQuY29tL3YxLjAvJG1ldGFkYXRhI3VzZXJzLyRlbnRpdHlcXFwiLFxcbiAgICBcXFwiQG9kYXRhLmlkXFxcIjogXFxcImh0dHBzOi8vZ3JhcGgubWljcm9zb2Z0LmNvbS92Mi83MTFmZmE5Yy01OTcyLTQ3MTMtYWNlMy02ODhjOTczMjYxNGEvZGlyZWN0b3J5T2JqZWN0cy83ZDc3NTllMi0zNmQ4LTRlNjQtYjE3My0zZjg5MGQ3ZDQ2ZDYvTWljcm9zb2Z0LkRpcmVjdG9yeVNlcnZpY2VzLlVzZXJcXFwiLFxcbiAgICBcXFwiYnVzaW5lc3NQaG9uZXNcXFwiOiBbXFxuICAgICAgICBcXFwiMTgwMTQ3MzU0NTFcXFwiXFxuICAgIF0sXFxuICAgIFxcXCJkaXNwbGF5TmFtZVxcXCI6IFxcXCJWb2xrZXIgU2NoZXViZXJcXFwiLFxcbiAgICBcXFwiZ2l2ZW5OYW1lXFxcIjogXFxcIlZvbGtlclxcXCIsXFxuICAgIFxcXCJqb2JUaXRsZVxcXCI6IG51bGwsXFxuICAgIFxcXCJtYWlsXFxcIjogXFxcInZzY2hldWJlckB2c2NoZXViZXIub25taWNyb3NvZnQuY29tXFxcIixcXG4gICAgXFxcIm1vYmlsZVBob25lXFxcIjogbnVsbCxcXG4gICAgXFxcIm9mZmljZUxvY2F0aW9uXFxcIjogbnVsbCxcXG4gICAgXFxcInByZWZlcnJlZExhbmd1YWdlXFxcIjogbnVsbCxcXG4gICAgXFxcInN1cm5hbWVcXFwiOiBcXFwiU2NoZXViZXJcXFwiLFxcbiAgICBcXFwidXNlclByaW5jaXBhbE5hbWVcXFwiOiBcXFwidnNjaGV1YmVyQHZzY2hldWJlci5vbm1pY3Jvc29mdC5jb21cXFwiLFxcbiAgICBcXFwiaWRcXFwiOiBcXFwiN2Q3NzU5ZTItMzZkOC00ZTY0LWIxNzMtM2Y4OTBkN2Q0NmQ2XFxcIlxcbn1cXG4gKi9cXG5cXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGRcXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvblxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3RcXG5cXG5sb2dnZXIubWVzc2FnZShcXFwiS2F1YWkgTWljcm9zb2Z0IFByb2ZpbGUgTm9ybWFsaXphdGlvbjogcmF3UHJvZmlsZT17fVxcXCIsIHJhd1Byb2ZpbGUpXFxuXFxucmV0dXJuIGpzb24ob2JqZWN0KFxcbiAgICAgICAgZmllbGQoXFxcImlkXFxcIiwgcmF3UHJvZmlsZS5pZCksXFxuICAgICAgICBmaWVsZChcXFwiZGlzcGxheU5hbWVcXFwiLCByYXdQcm9maWxlLmRpc3BsYXlOYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJnaXZlbk5hbWVcXFwiLCByYXdQcm9maWxlLmdpdmVuTmFtZSksXFxuICAgICAgICBmaWVsZChcXFwiZmFtaWx5TmFtZVxcXCIsIHJhd1Byb2ZpbGUuc3VybmFtZSksXFxuICAgICAgICBmaWVsZChcXFwiZW1haWxcXFwiLCByYXdQcm9maWxlLnVzZXJQcmluY2lwYWxOYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJ1c2VybmFtZVxcXCIsIHJhd1Byb2ZpbGUudXNlclByaW5jaXBhbE5hbWUpLFxcbiAgICAgICAgZmllbGQoXFxcImdyb3Vwc1xcXCIsIHJhd1Byb2ZpbGUuZ3JvdXBzKSkpXCJcbiI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"91d197de-5916-4dca-83b5-9a4df26e7159\",\"name\":\"WordPress Profile Normalization\",\"description\":\"Normalizes raw profile data from WordPress\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJuYW1lKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmRpc3BsYXlfbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5hdmF0YXJfVVJMKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkpCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"ffcfbd20-38d5-4f74-8766-7df90af4dbe4\",\"name\":\"Check Resolved Username\",\"description\":\"Check if username has already been resolved to _id.\",\"script\":\"LyogUmVzb2x2ZSBVc2VybmFtZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDaGVjayBpZiB1c2VybmFtZSBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkIHRvIF9pZC4KICogUmV0dXJuICJ0cnVlIiBpZiByZXNvbHZlZCwgImZhbHNlIiBvdGhlcndpc2UuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogLSBmYWxzZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIGlmIChub2RlU3RhdGUuZ2V0KCJfaWQiKSkgewogICAgICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gImZhbHNlIjsKICAgIH0KfSgpKTsK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"6b3cfd48-62d3-48ff-a96f-fe8f3a22ab30\",\"name\":\"Amazon Profile Normalization\",\"description\":\"Normalizes raw profile data from Amazon\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQo=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"69f06e63-128c-4e2f-af52-079a8a6f448b\",\"name\":\"SAML2 SP Adapter Script\",\"description\":\"Default global script for SAML2 SP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhlIHNjcmlwdCBoYXMgdGhlc2UgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyBhIFNBTUwyIGZsb3cuCiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25SZXF1ZXN0CiAqICAgICAgLSBwcmVTaW5nbGVTaWduT25Qcm9jZXNzCiAqICAgICAgLSBwb3N0U2luZ2xlU2lnbk9uU3VjY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZVNpZ25PbkZhaWx1cmUKICogICAgICAtIHBvc3ROZXdOYW1lSURTdWNjZXNzCiAqICAgICAgLSBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzcwogKiAgICAgIC0gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcwogKiAgICAgIC0gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MKICoKICogUGxlYXNlIHNlZSB0aGUgSmF2YURvYyBmb3IgdGhlIGludGVyZmFjZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmFtL3NhbWwyL3BsdWdpbnMvU1BBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEVudGl0eUlkIC0gU3RyaW5nCiAqICAgICBUaGUgZW50aXR5IElEIGZvciB0aGUgSWRlbnRpdHkgUHJvdmlkZXIgZm9yIHdoaWNoIHRoZSBzaWduLW9uIHJlcXVlc3Qgd2lsbCBiZSBzZW50LgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgxKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDIpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDMpCiAqICAgICBUaGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IHRoYXQgaXMgc2VudCBmcm9tIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpCiAqICAgICBUaGUgc2luZ2xlIHNpZ24tb24gc2Vzc2lvbi4gVGhlIHJlZmVyZW5jZSB0eXBlIG9mIHRoaXMgaXMgT2JqZWN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNhc3RlZCB0byBTU09Ub2tlbi4KICogcmVzIC0gUmVzcG9uc2UgKDUpCiAqICAgICBUaGUgU1NPIFJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIElkZW50aXR5IFByb3ZpZGVyLgogKiBwcm9maWxlIC0gU3RyaW5nCiAqICAgICBUaGUgcHJvdG9jb2wgcHJvZmlsZSB0aGF0IGlzIHVzZWQsIHRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZnJvbSBTQU1MMkNvbnN0YW50cyAoNik6CiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9QT1NUCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9BUlRJRkFDVAogKiAgICAgICAgICAtIFNBTUwyQ29uc3RhbnRzLlBBT1MKICogb3V0IC0gUHJpbnRXcml0ZXIgKDcpCiAqICAgICBUaGUgUHJpbnRXcml0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSB0by4KICogaXNGZWRlcmF0aW9uIC0gYm9vbGVhbgogKiAgICAgU2V0IHRvIHRydWUgaWYgdXNpbmcgZmVkZXJhdGlvbiwgb3RoZXJ3aXNlIGZhbHNlLgogKiBmYWlsdXJlQ29kZSAtIGludAogKiAgICAgQW4gaW50ZWdlciBob2xkaW5nIHRoZSBmYWlsdXJlIGNvZGUgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuIEZvciBwb3RlbnRpYWwgdmFsdWVzIHNlZSBTUEFkYXB0ZXIuCiAqIHVzZXJJZCAtIFN0cmluZwogKiAgICAgVGhlIHVuaXF1ZSB1bml2ZXJzYWwgSUQgb2YgdGhlIHVzZXIgd2l0aCB3aG9tIHRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZC4KICogaWRSZXF1ZXN0IC0gTWFuYWdlTmFtZUlEUmVxdWVzdCAoOCkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlcXVlc3QsIHRoaXMgd2lsbCBiZSBudWxsIGlmIHRoZSByZXF1ZXN0IG9iamVjdCBpcyBub3QgYXZhaWxhYmxlCiAqIGlkUmVzcG9uc2UgLSBNYW5hZ2VOYW1lSURSZXNwb25zZSAoOSkKICogICAgIFRoZSBuZXcgbmFtZSBpZGVudGlmaWVyIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGlzIG5vdCBhdmFpbGFibGUKICogYmluZGluZyAtIFN0cmluZwogKiAgICAgVGhlIGJpbmRpbmcgdXNlZCBmb3IgdGhlIG5ldyBuYW1lIGlkZW50aWZpZXIgcmVxdWVzdC4gVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAgICAgICAgLSBTQU1MMkNvbnN0YW50cy5TT0FQCiAqICAgICAgICAgIC0gU0FNTDJDb25zdGFudHMuSFRUUF9SRURJUkVDVAogKiBsb2dvdXRSZXF1ZXN0IC0gTG9nb3V0UmVxdWVzdCAoMTApCiAqICAgICBUaGUgc2luZ2xlIGxvZ291dCByZXF1ZXN0LgogKiBsb2dvdXRSZXNwb25zZSAtIExvZ291dFJlc3BvbnNlICgxMSkKICogICAgIFRoZSBzaW5nbGUgbG9nb3V0IHJlc3BvbnNlLgogKiBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBTcEFkYXB0ZXJTY3JpcHRIZWxwZXIgKDEyKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgU3BBZGFwdGVyU2NyaXB0SGVscGVyIGNvbnRhaW5pbmcgaGVscGVyIG1ldGhvZHMuIFNlZSBKYXZhZG9jIGZvciBtb3JlIGRldGFpbHMuCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy48c2NyaXB0IG5hbWU+CiAqCiAqIFRocm93cyBTQU1MMkV4Y2VwdGlvbiAoMTMpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIEh0dHBTZXJ2bGV0UmVxdWVzdCAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXF1ZXN0Lmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlc3BvbnNlIC0gaHR0cHM6Ly90b21jYXQuYXBhY2hlLm9yZy90b21jYXQtNy4wLWRvYy9zZXJ2bGV0YXBpL2phdmF4L3NlcnZsZXQvaHR0cC9IdHRwU2VydmxldFJlc3BvbnNlLmh0bWwuCiAqICgzKSBBdXRoblJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvQXV0aG5SZXF1ZXN0Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBSZXNwb25zZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wcm90b2NvbC9SZXNwb25zZS5odG1sCiAqICg2KSBTQU1MMkNvbnN0YW50cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9jb21tb24vU0FNTDJDb25zdGFudHMuaHRtbAogKiAoNykgUHJpbnRXcml0ZXIgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9pby9QcmludFdyaXRlci5odG1sCiAqICg4KSBNYW5hZ2VOYW1lSURSZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL01hbmFnZU5hbWVJRFJlcXVlc3QuaHRtbAogKiAoOSkgTWFuYWdlTmFtZUlEUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTWFuYWdlTmFtZUlEUmVzcG9uc2UuaHRtbAogKiAoMTApIExvZ291dFJlcXVlc3QgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVxdWVzdC5odG1sCiAqICgxMSkgTG9nb3V0UmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvTG9nb3V0UmVzcG9uc2UuaHRtbAogKiAoMTIpIFNwQWRhcHRlclNjcmlwdEhlbHBlciAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjMvX2F0dGFjaG1lbnRzL2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9wbHVnaW5zL3NjcmlwdGVkL1NwQWRhcHRlclNjcmlwdEhlbHBlci5odG1sLgogKiAoMTMpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBTUCBBZGFwdGVyIHNjcmlwdGVkIHBsdWdpbi4KICovCgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTaW5nbGVTaWduT25SZXF1ZXN0OgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIGlkcEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblJlcXVlc3QoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZVNpZ25PblByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHByZVNpbmdsZVNpZ25PblByb2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgb3V0CiAqICAgICBzZXNzaW9uCiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlcwogKiAgICAgcHJvZmlsZQogKiAgICAgaXNGZWRlcmF0aW9uCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIHJlc3BvbnNlIGlzIGJlaW5nIHJlZGlyZWN0ZWQsIGZhbHNlIGlmIG5vdC4gRGVmYXVsdCB0byBmYWxzZS4KICovCmZ1bmN0aW9uIHBvc3RTaW5nbGVTaWduT25TdWNjZXNzKCkgewogICAgcmV0dXJuIGZhbHNlOwp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzCiAqICAgICBwcm9maWxlCiAqICAgICBmYWlsdXJlQ29kZQogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiByZXNwb25zZSBpcyBiZWluZyByZWRpcmVjdGVkLCBmYWxzZSBpZiBub3QuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwb3N0U2luZ2xlU2lnbk9uRmFpbHVyZSgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdE5ld05hbWVJRFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGlkUmVxdWVzdAogKiAgICAgaWRSZXNwb25zZQogKiAgICAgYmluZGluZwogKiAgICAgc3BBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICBsb2dnZXIKICovCmZ1bmN0aW9uIHBvc3ROZXdOYW1lSURTdWNjZXNzKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwb3N0VGVybWluYXRlTmFtZUlEU3VjY2VzczoKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgcmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHVzZXJJZAogKiAgICAgaWRSZXF1ZXN0CiAqICAgICBpZFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFRlcm1pbmF0ZU5hbWVJRFN1Y2Nlc3MoKSB7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNpbmdsZUxvZ291dFByb2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlTG9nb3V0UHJvY2VzcygpIHsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3M6CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIHJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICB1c2VySWQKICogICAgIGxvZ291dFJlcXVlc3QKICogICAgIGxvZ291dFJlc3BvbnNlCiAqICAgICBiaW5kaW5nCiAqICAgICBzcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIGxvZ2dlcgogKi8KZnVuY3Rpb24gcG9zdFNpbmdsZUxvZ291dFN1Y2Nlc3MoKSB7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_SP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"424da748-82cc-4b54-be6f-82bd64d82a74\",\"name\":\"Yahoo Profile Normalization\",\"description\":\"Normalizes raw profile data from Yahoo\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIHJhd1Byb2ZpbGUuZmFtaWx5X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGljdHVyZSksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImxvY2FsZSIsIHJhd1Byb2ZpbGUubG9jYWxlKSkpCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"8e298710-b55e-4085-a464-88a375a4004b\",\"name\":\"Twitter Profile Normalization\",\"description\":\"Normalizes raw profile data from Twitter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkX3N0ciksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnByb2ZpbGVfaW1hZ2VfdXJsKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnNjcmVlbl9uYW1lKSkpCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"400e48ba-3f13-4144-ac7b-f824ea8e98c5\",\"name\":\"OAuth2 JWT Issuer Script\",\"description\":\"Default global script for scripted JWT Issuers\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgdG8gZGVyaXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGR5bmFtaWMgSldUIGlzc3VlciBmcm9tIHRoZSBpc3N1ZXIgc3RyaW5nLgogKiBBIEpXVCBpc3N1ZXIgaXMgbWFkZSB1cCBvZiB0aGUgZm9sbG93aW5nOgogKiAgIC0gaXNzdWVyIC0gdGhlIGlkZW50aWZpZXIgb2YgdGhlIGVudGl0eSB0aGF0IGlzc3VlcyBKV1RzCiAqICAgLSByZXNvdXJjZSBvd25lciBzdWJqZWN0IGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZSBvd25lcgogKiAgIC0gY29uc2VudGVkIHNjb3BlIGNsYWltIC0gdGhlIG5hbWUgb2YgdGhlIGNsYWltIGluIHRoZSBKV1QgdGhhdCByZXByZXNlbnRzIHNjb3BlIHRoYXQgdGhlIHJlc291cmNlIG93bmVyCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYWxyZWFkeSBjb25zZW50ZWQgdG8gZXh0ZXJuYWxseQogKiAgIC0gYXV0aG9yaXplZCBzdWJqZWN0cyAtIHRoZSBzZXQgb2YgcHJpbmNpcGFsIGlkZW50aWZpZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQgdG8gYmUgdXNlZCBhcyByZXNvdXJjZSBvd25lcnMKICogICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgaXNzdWVyCiAqICAgLSBKV0tzIC0gZWl0aGVyIGEgc2V0IG9mIEpXS3Mgb3IgY29ubmVjdGlvbiBkZXRhaWxzIGZvciBvYnRhaW5pbmcgdGhhdCBzZXQsIHRoYXQgYXJlIHRoZSBwdWJsaWMga2V5cyB0aGF0CiAqICAgICAgICAgICAgY2FuIHZlcmlmeSB0aGUgc2lnbmF0dXJlIG9uIHRoZSBpc3N1ZWQgSldUcy4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIGlzc3VlciAtIFN0cmluZwogKiAgICAgICAgICBUaGUgaXNzdWVyIGZyb20gdGhlIGJlYXJlciBKV1QuCiAqIHJlYWxtIC0gU3RyaW5nCiAqICAgICAgICAgVGhlIHBhdGggb2YgdGhlIHJlYWxtIHRoYXQgaXMgaGFuZGxpbmcgdGhlIHJlcXVlc3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIHNjcmlwdCBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5PQVVUSDJfU0NSSVBURURfSldUX0lTU1VFUi4KICogaHR0cENsaWVudCAtIEhUVFAgQ2xpZW50ICgxKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgSFRUUCBDbGllbnQgaW5zdGFuY2U6CiAqICAgICAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC4KICogaWRSZXBvc2l0b3J5IC0gSWRlbnRpdHkgUmVwb3NpdG9yeSAoMikuIEFsd2F5cyBwcmVzZW50LgogKiBzZWNyZXRzIC0gU2VjcmV0cyBhY2Nlc3NvciAoMykuIEFsd2F5cyBwcmVzZW50LgogKgogKiBSZXR1cm4gLSBvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLlRydXN0ZWRKd3RJc3N1ZXJDb25maWcgKDQpIC0gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRydXN0ZWQgSldUIGlzc3Vlci4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgyKSBTY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuYW0vc2NyaXB0aW5nL2FwaS9pZGVudGl0eS9TY3JpcHRlZElkZW50aXR5UmVwb3NpdG9yeS5odG1sLgogKiAoMykgU2NyaXB0ZWRTZWNyZXRzIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5hbS9zY3JpcHRpbmcvYXBpL3NlY3JldHMvU2NyaXB0ZWRTZWNyZXRzLmh0bWwuCiAqICg0KSBUcnVzdGVkSnd0SXNzdWVyQ29uZmlnIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1RydXN0ZWRKd3RJc3N1ZXJDb25maWcuaHRtbC4KICovCgovKiBFWEFNUExFCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVHJ1c3RlZEp3dElzc3VlckNvbmZpZywKICAgICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbnMKICAgICk7CgogICAgdmFyIGlzcyA9IGlkUmVwb3NpdG9yeS5nZXRJZGVudGl0eShpc3N1ZXIpOwogICAgaWYgKGlzcyA9PSBudWxsKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoJ05vIGlzc3VlciBmb3VuZCBmb3I6ICcraXNzdWVyKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxvZ2dlci5tZXNzYWdlKCdGb3VuZCBpc3N1ZXI6ICcraXNzKTsKICAgIC8vIGluIHRoaXMgZXhhbXBsZSBlaXRoZXIgYSBKV0sgc2V0IG9yIGEgVVJJIHRvIGEgSldLIHNldCBhcmUgaW4gdGhlIHBvc3RhbEFkZHJlc3MgYXR0cmlidXRlCiAgICB2YXIgandrc0F0dHJzID0gaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygncG9zdGFsQWRkcmVzcycpOwogICAgdmFyIGp3a1NldCA9IGp3a3NBdHRycy5sZW5ndGggPT09IDAgPyBudWxsIDogandrc0F0dHJzWzBdOwogICAgdmFyIGNvbmZpZyA9IG5ldyBmckphdmEuVHJ1c3RlZEp3dElzc3VlckNvbmZpZygKICAgICAgICBpc3N1ZXIsCiAgICAgICAgJ3N1YicsCiAgICAgICAgJ3Njb3BlJywKICAgICAgICAvLyBpbiB0aGlzIGV4YW1wbGUsIHZhbGlkIHN1YmplY3RzIGFyZSBzdG9yZWQgaW4gdGhlIG1haWwgYXR0cmlidXRlCiAgICAgICAgaXNzLmdldEF0dHJpYnV0ZVZhbHVlcygnbWFpbCcpLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCd7JykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgIGp3a1NldC5zdGFydHNXaXRoKCdodHRwJykgPyBqd2tTZXQgOiBudWxsLAogICAgICAgICc1IG1pbnV0ZXMnLAogICAgICAgICcxIG1pbnV0ZScKICAgICk7CiAgICByZXR1cm4gY29uZmlnOwp9KCkpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_SCRIPTED_JWT_ISSUER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"248b8a56-df81-4b1b-b4ba-45d994f6504c\",\"name\":\"SAML2 IDP Adapter Script\",\"description\":\"Default global script for SAML2 IDP Adapter\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGUgc2NyaXB0IGhhcyB0aGVzZSB0b3AgbGV2ZWwgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZXhlY3V0ZWQgZHVyaW5nIGEgU0FNTDIgZmxvdy4KICogICAgICAtIHByZVNpbmdsZVNpZ25PbgogKiAgICAgIC0gcHJlQXV0aGVudGljYXRpb24KICogICAgICAtIHByZVNlbmRSZXNwb25zZQogKiAgICAgIC0gcHJlU2lnblJlc3BvbnNlCiAqICAgICAgLSBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlCiAqCiAqIFBsZWFzZSBzZWUgdGhlIGphdmFkb2MgZm9yIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBtZXRob2RzLgogKiBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9TQU1MMklkZW50aXR5UHJvdmlkZXJBZGFwdGVyLmh0bWwKICogTm90ZSB0aGF0IHRoZSBpbml0aWFsaXplIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzY3JpcHRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlcy4gQ2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zIGZvciB0aGUgdmFyaWFibGVzIGF2YWlsYWJsZSB0byBpdC4KICoKICogaG9zdGVkRW50aXR5SWQgLSBTdHJpbmcKICogICAgIEVudGl0eSBJRCBmb3IgdGhlIGhvc3RlZCBJRFAKICogcmVhbG0gLSBTdHJpbmcKICogICAgIFJlYWxtIG9mIHRoZSBob3N0ZWQgSURQCiAqIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBJZHBBZGFwdGVyU2NyaXB0SGVscGVyICgxKQogKiAgICAgQW4gaW5zdGFuY2Ugb2YgSWRwQWRhcHRlclNjcmlwdEhlbHBlciBjb250YWluaW5nIGhlbHBlciBtZXRob2RzLiBTZWUgSmF2YWRvYyBmb3IgbW9yZSBkZXRhaWxzLgogKiByZXF1ZXN0IC0gSHR0cFNlcnZsZXRSZXF1ZXN0ICgyKQogKiAgICAgU2VydmxldCByZXF1ZXN0IG9iamVjdAogKiByZXNwb25zZSAtIEh0dHBTZXJ2bGV0UmVzcG9uc2UgKDMpCiAqICAgICBTZXJ2bGV0IHJlc3BvbnNlIG9iamVjdAogKiBhdXRoblJlcXVlc3QgLSBBdXRoblJlcXVlc3QgKDQpCiAqICAgICBUaGUgb3JpZ2luYWwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBzZW50IGZyb20gU1AKICogcmVxSWQgLSBTdHJpbmcKICogICAgIFRoZSBpZCB0byB1c2UgZm9yIGNvbnRpbnVhdGlvbiBvZiBwcm9jZXNzaW5nIGlmIHRoZSBhZGFwdGVyIHJlZGlyZWN0cwogKiByZXMgLSBSZXNwb25zZSAoNSkKICogICAgIFRoZSBTQU1MIFJlc3BvbnNlCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNikKICogICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLiBUaGUgcmVmZXJlbmNlIHR5cGUgb2YgdGhpcyBpcyBPYmplY3QgYW5kIHdvdWxkIG5lZWQgdG8gYmUgY2FzdGVkIHRvIFNTT1Rva2VuLgogKiByZWxheVN0YXRlIC0gU3RyaW5nCiAqICAgICBUaGUgcmVsYXlTdGF0ZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcmVkaXJlY3QKICogZmF1bHRDb2RlIC0gU3RyaW5nCiAqICAgICB0aGUgZmF1bHQgY29kZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIFNBTUwgcmVzcG9uc2UKICogZmF1bHREZXRhaWwgLSBTdHJpbmcKICogICAgIHRoZSBmYXVsdCBkZXRhaWwgdGhhdCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBTQU1MIHJlc3BvbnNlCiAqIGxvZ2dlciAtIExvZ2dlciBpbnN0YW5jZQogKiAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwuCiAqICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuPHNjcmlwdCBuYW1lPgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb24gKDcpOgogKiAgICAgZm9yIGFueSBleGNlcHRpb25zIG9jY3VycmluZyBpbiB0aGUgYWRhcHRlci4gVGhlIGZlZGVyYXRpb24gcHJvY2VzcyB3aWxsIGNvbnRpbnVlCiAqCiAqIENsYXNzIHJlZmVyZW5jZToKICogKDEpIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBZGFwdGVyU2NyaXB0SGVscGVyLmh0bWwuCiAqICgyKSBIdHRwU2VydmxldFJlcXVlc3QgLSBodHRwczovL3RvbWNhdC5hcGFjaGUub3JnL3RvbWNhdC03LjAtZG9jL3NlcnZsZXRhcGkvamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdC5odG1sLgogKiAoMykgSHR0cFNlcnZsZXRSZXNwb25zZSAtIGh0dHBzOi8vdG9tY2F0LmFwYWNoZS5vcmcvdG9tY2F0LTcuMC1kb2Mvc2VydmxldGFwaS9qYXZheC9zZXJ2bGV0L2h0dHAvSHR0cFNlcnZsZXRSZXNwb25zZS5odG1sLgogKiAoNCkgQXV0aG5SZXF1ZXN0IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL3Byb3RvY29sL0F1dGhuUmVxdWVzdC5odG1sLgogKiAoNSkgUmVzcG9uc2UgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4zL19hdHRhY2htZW50cy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcHJvdG9jb2wvUmVzcG9uc2UuaHRtbC4KICogKDYpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDcpIFNBTUwyRXhjZXB0aW9uIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMy9fYXR0YWNobWVudHMvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L3NhbWwyL2NvbW1vbi9TQU1MMkV4Y2VwdGlvbi5odG1sLgogKi8KCi8qCiAqIFRlbXBsYXRlL2RlZmF1bHQgc2NyaXB0IGZvciBTQU1MMiBJRFAgQWRhcHRlciBzY3JpcHRlZCBwbHVnaW4uCiAqLwoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2luZ2xlU2lnbk9uOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHJlc3BvbnNlCiAqICAgICByZXFJZAogKiAgICAgbG9nZ2VyCiAqCiAqIFJldHVybiAtIHRydWUgaWYgYnJvd3NlciByZWRpcmVjdGlvbiBpcyBoYXBwZW5pbmcgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2luZ2xlU2lnbk9uICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlQXV0aGVudGljYXRpb246CiAqICAgICBob3N0ZWRFbnRpdHlJZAogKiAgICAgcmVhbG0KICogICAgIGlkcEFkYXB0ZXJTY3JpcHRIZWxwZXIKICogICAgIHJlcXVlc3QKICogICAgIGF1dGhuUmVxdWVzdAogKiAgICAgcmVzcG9uc2UKICogICAgIHJlcUlkCiAqICAgICBzZXNzaW9uCiAqICAgICByZWxheVN0YXRlCiAqICAgICBsb2dnZXIKICoKICogUmV0dXJuIC0gdHJ1ZSBpZiBicm93c2VyIHJlZGlyZWN0aW9uIGlzIGhhcHBlbmluZyBhZnRlciBwcm9jZXNzaW5nLCBmYWxzZSBvdGhlcndpc2UuIERlZmF1bHQgdG8gZmFsc2UuCiAqLwpmdW5jdGlvbiBwcmVBdXRoZW50aWNhdGlvbiAoKSB7CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qCiAqIEF2YWlsYWJsZSB2YXJpYWJsZXMgZm9yIHByZVNlbmRSZXNwb25zZToKICogICAgIGhvc3RlZEVudGl0eUlkCiAqICAgICByZWFsbQogKiAgICAgaWRwQWRhcHRlclNjcmlwdEhlbHBlcgogKiAgICAgcmVxdWVzdAogKiAgICAgYXV0aG5SZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgcmVxSWQKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIGxvZ2dlcgogKgogKiBSZXR1cm4gLSB0cnVlIGlmIGJyb3dzZXIgcmVkaXJlY3Rpb24gaGFwcGVuZWQgYWZ0ZXIgcHJvY2Vzc2luZywgZmFsc2Ugb3RoZXJ3aXNlLiBEZWZhdWx0IHRvIGZhbHNlLgogKi8KZnVuY3Rpb24gcHJlU2VuZFJlc3BvbnNlICgpIHsKICAgIHJldHVybiBmYWxzZTsKfQoKLyoKICogQXZhaWxhYmxlIHZhcmlhYmxlcyBmb3IgcHJlU2lnblJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICBhdXRoblJlcXVlc3QKICogICAgIHNlc3Npb24KICogICAgIHJlbGF5U3RhdGUKICogICAgIHJlcwogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTaWduUmVzcG9uc2UgKCkgewp9CgovKgogKiBBdmFpbGFibGUgdmFyaWFibGVzIGZvciBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlOgogKiAgICAgaG9zdGVkRW50aXR5SWQKICogICAgIHJlYWxtCiAqICAgICBpZHBBZGFwdGVyU2NyaXB0SGVscGVyCiAqICAgICByZXF1ZXN0CiAqICAgICByZXNwb25zZQogKiAgICAgZmF1bHRDb2RlCiAqICAgICBmYXVsdERldGFpbAogKiAgICAgbG9nZ2VyCiAqLwpmdW5jdGlvbiBwcmVTZW5kRmFpbHVyZVJlc3BvbnNlICgpIHsKfQo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ADAPTER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"60609c1a-4cef-4729-a417-354aafdebf3f\",\"name\":\"LINE Profile Normalization\",\"description\":\"Normalizes raw profile data from LINE\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjQgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCi8vIExJTkUgZG9lcyBub3QgcmV0dXJuIHRoZSBlbWFpbCBmcm9tIHRoZSB1c2VySW5mbyBlbmRwb2ludCBidXQgc2hvdWxkIHJldHVybiBpdCBmcm9tIHRoZSB0b2tlbiBlbmRwb2ludCBhbmQgdGhlcmVmb3JlCi8vIGl0IHNob3VsZCBiZSBzZXQgaW4gdGhlIHNoYXJlZCBzdGF0ZQp2YXIgZW1haWwgPSAiIgp2YXIgc3ViamVjdElkID0gcmF3UHJvZmlsZS5zdWIKdmFyIHVzZXJuYW1lID0gc3ViamVjdElkCnZhciBmaXJzdE5hbWUgPSAiICIKdmFyIGxhc3ROYW1lID0gIiAiCgppZiAoc2hhcmVkU3RhdGUuZ2V0KCJjbGFpbXNfc2V0IikgIT0gbnVsbCAmJiBzaGFyZWRTdGF0ZS5nZXQoImNsYWltc19zZXQiKS5lbWFpbCAhPSBudWxsKSB7CiAgICBlbWFpbCA9IHNoYXJlZFN0YXRlLmdldCgiY2xhaW1zX3NldCIpLmVtYWlsCiAgICB1c2VybmFtZSA9IGVtYWlsCn0KCmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZCgibmFtZSIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkgewogICAgdmFyIHNwbGl0TmFtZSA9IHJhd1Byb2ZpbGUubmFtZS5hc1N0cmluZygpLnNwbGl0KCIgIikKICAgIGZpcnN0TmFtZSA9IHNwbGl0TmFtZVswXQogICAgbGFzdE5hbWUgPSBzcGxpdE5hbWVbLTFdCn0KCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnN1YiksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIGVtYWlsKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgZmlyc3ROYW1lKSwKICAgICAgICBmaWVsZCgiZmFtaWx5TmFtZSIsIGxhc3ROYW1lKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCB1c2VybmFtZSkpKQo=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"472534ec-a25f-468d-a606-3fb1935190df\",\"name\":\"WeChat Profile Normalization\",\"description\":\"Normalizes raw profile data from WeChat\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLm9wZW5pZCksCiAgICAgICAgZmllbGQoImRpc3BsYXlOYW1lIiwgcmF3UHJvZmlsZS5uaWNrbmFtZSksCiAgICAgICAgZmllbGQoInBob3RvVXJsIiwgcmF3UHJvZmlsZS5oZWFkaW1ndXJsKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLm5pY2tuYW1lKSkpCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"d3ced49b-50cd-4ee9-bd8b-33a46f367fb1\",\"name\":\"Bravo endUserUIClient OIDC Claims Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"ed685f9f-5909-4726-86e8-22bd38b47663\",\"name\":\"Normalized Profile to Identity\",\"description\":\"Converts a normalized social profile into an Identity\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlCgpKc29uVmFsdWUgaWRlbnRpdHkgPSBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSwKICAgICAgICBmaWVsZCgic24iLCBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lKSwKICAgICAgICBmaWVsZCgibWFpbCIsIG5vcm1hbGl6ZWRQcm9maWxlLmVtYWlsKSwKICAgICAgICBmaWVsZCgiY24iLCBub3JtYWxpemVkUHJvZmlsZS5kaXNwbGF5TmFtZSksCiAgICAgICAgZmllbGQoInVzZXJOYW1lIiwgbm9ybWFsaXplZFByb2ZpbGUudXNlcm5hbWUpLAogICAgICAgIGZpZWxkKCJpcGxhbmV0LWFtLXVzZXItYWxpYXMtbGlzdCIsIHNlbGVjdGVkSWRwICsgJy0nICsgbm9ybWFsaXplZFByb2ZpbGUuaWQuYXNTdHJpbmcoKSkpKQoKcmV0dXJuIGlkZW50aXR5Cg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"b4f3facb-c754-4e7f-b1c0-f4d46f592126\",\"name\":\"LinkedIn Profile Normalization\",\"description\":\"Normalizes raw profile data from LinkedIn\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjQgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5maWVsZAppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvbgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUub2JqZWN0CgpyZXR1cm4ganNvbihvYmplY3QoCiAgICAgICAgZmllbGQoImlkIiwgcmF3UHJvZmlsZS5zdWIpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZ2l2ZW5fbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmZhbWlseV9uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJlbWFpbFZlcmlmaWVkIiwgcmF3UHJvZmlsZS5lbWFpbF92ZXJpZmllZCksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQo=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"8862ca8f-7770-4af5-a888-ac0df0947f36\",\"name\":\"LinkedIn Profile Normalization\",\"description\":\"Normalizes raw profile data from LinkedIn\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZ2l2ZW5OYW1lIiwgcmF3UHJvZmlsZS5maXJzdE5hbWUubG9jYWxpemVkLmdldCgwKSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmxhc3ROYW1lLmxvY2FsaXplZC5nZXQoMCkpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucHJvZmlsZVBpY3R1cmUuZGlzcGxheUltYWdlKSwKICAgICAgICBmaWVsZCgiZW1haWwiLCByYXdQcm9maWxlLmVsZW1lbnRzLmdldCgwKS5nZXQoImhhbmRsZX4iKS5lbWFpbEFkZHJlc3MpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZWxlbWVudHMuZ2V0KDApLmdldCgiaGFuZGxlfiIpLmVtYWlsQWRkcmVzcykpKQo=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3d97c436-42c0-4dd0-a571-ea6f34f752b3\",\"name\":\"Itsme Profile Normalization\",\"description\":\"Normalizes raw profile data from Itsme\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgppbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGQKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmpzb24KaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdAoKaW1wb3J0IG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUKCkpzb25WYWx1ZSBtYW5hZ2VkVXNlciA9IGpzb24ob2JqZWN0KAogICAgICAgIGZpZWxkKCJpZCIsIHJhd1Byb2ZpbGUuc3ViKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmdpdmVuX25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksCiAgICAgICAgZmllbGQoInVzZXJuYW1lIiwgcmF3UHJvZmlsZS5lbWFpbCksCiAgICAgICAgZmllbGQoImVtYWlsIiwgcmF3UHJvZmlsZS5lbWFpbCkpKQpyZXR1cm4gbWFuYWdlZFVzZXIK\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"7e3d7067-d50f-4674-8c76-a3e13a810c33\",\"name\":\"Scripted Module - Server Side\",\"description\":\"Default global script for server side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgp2YXIgU1RBUlRfVElNRSA9IDk7ICAvLyA5YW0KdmFyIEVORF9USU1FICAgPSAxNzsgLy8gNXBtCnZhciBsb25naXR1ZGUsIGxhdGl0dWRlOwp2YXIgbG9jYWxUaW1lOwoKbG9nZ2VyLm1lc3NhZ2UoIlN0YXJ0aW5nIHNjcmlwdGVkIGF1dGhlbnRpY2F0aW9uIik7CmxvZ2dlci5tZXNzYWdlKCJVc2VyOiAiICsgdXNlcm5hbWUpOwoKdmFyIHVzZXJQb3N0YWxBZGRyZXNzID0gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKTsKbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgYWRkcmVzczogIiArIHVzZXJQb3N0YWxBZGRyZXNzKTsKCmdldExvbmdpdHVkZUxhdGl0dWRlRnJvbVVzZXJQb3N0YWxBZGRyZXNzKCk7CmdldExvY2FsVGltZSgpOwoKbG9nZ2VyLm1lc3NhZ2UoIkN1cnJlbnQgdGltZSBhdCB0aGUgdXNlcnMgbG9jYXRpb246ICIgKyBsb2NhbFRpbWUuZ2V0SG91cnMoKSk7CmlmIChsb2NhbFRpbWUuZ2V0SG91cnMoKSA8IFNUQVJUX1RJTUUgfHwgbG9jYWxUaW1lLmdldEhvdXJzKCkgPiBFTkRfVElNRSkgewogICAgbG9nZ2VyLmVycm9yKCJMb2dpbiBmb3JiaWRkZW4gb3V0c2lkZSB3b3JrIGhvdXJzISIpOwogICAgYXV0aFN0YXRlID0gRkFJTEVEOwp9IGVsc2UgewogICAgbG9nZ2VyLm1lc3NhZ2UoIkF1dGhlbnRpY2F0aW9uIGFsbG93ZWQhIik7CiAgICBhdXRoU3RhdGUgPSBTVUNDRVNTOwp9CgpmdW5jdGlvbiBnZXRMb25naXR1ZGVMYXRpdHVkZUZyb21Vc2VyUG9zdGFsQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlclBvc3RhbEFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwogICAgICAvL3RoZSBhYm92ZSBVUkkgaGFzIHRvIGJlIGV4dGVuZGVkIHdpdGggYW4gQVBJX0tFWSBpZiB1c2VkIGluIGEgZnJlcXVlbnQgbWFubmVyCiAgICAgIC8vc2VlIGRvY3VtZW50YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9nZW9jb2RpbmcvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIGdlb2NvZGUgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIHZhciBpOwogICAgZm9yIChpID0gMDsgaSA8IGdlb2NvZGUucmVzdWx0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciByZXN1bHQgPSBnZW9jb2RlLnJlc3VsdHNbaV07CiAgICAgICAgbGF0aXR1ZGUgPSByZXN1bHQuZ2VvbWV0cnkubG9jYXRpb24ubGF0OwogICAgICAgIGxvbmdpdHVkZSA9IHJlc3VsdC5nZW9tZXRyeS5sb2NhdGlvbi5sbmc7CgogICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJsYXRpdHVkZToiICsgbGF0aXR1ZGUgKyAiIGxvbmdpdHVkZToiICsgbG9uZ2l0dWRlKTsKICAgIH0KfQoKZnVuY3Rpb24gZ2V0TG9jYWxUaW1lKCkgewoKICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDA7CiAgICB2YXIgbG9jYXRpb24gPSAibG9jYXRpb249IiArIGxhdGl0dWRlICsgIiwiICsgbG9uZ2l0dWRlOwogICAgdmFyIHRpbWVzdGFtcCA9ICJ0aW1lc3RhbXA9IiArIG5vdzsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS90aW1lem9uZS9qc29uPyIgKyBsb2NhdGlvbiArICImIiArIHRpbWVzdGFtcCk7CiAgICAgIHJlcXVlc3Quc2V0TWV0aG9kKCJHRVQiKTsKICAgICAgLy90aGUgYWJvdmUgVVJJIGhhcyB0byBiZSBleHRlbmRlZCB3aXRoIGFuIEFQSV9LRVkgaWYgdXNlZCBpbiBhIGZyZXF1ZW50IG1hbm5lcgogICAgICAvL3NlZSBkb2N1bWVudGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vdGltZXpvbmUvaW50cm8KCiAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0KCk7CiAgICBsb2dSZXNwb25zZShyZXNwb25zZSk7CgogICAgdmFyIHRpbWV6b25lID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICB2YXIgbG9jYWxUaW1lc3RhbXAgPSBwYXJzZUludChub3cpICsgcGFyc2VJbnQodGltZXpvbmUuZHN0T2Zmc2V0KSArIHBhcnNlSW50KHRpbWV6b25lLnJhd09mZnNldCk7CiAgICBsb2NhbFRpbWUgPSBuZXcgRGF0ZShsb2NhbFRpbWVzdGFtcCoxMDAwKTsKfQoKZnVuY3Rpb24gZ2V0VXNlclBvc3RhbEFkZHJlc3MoKSB7CiAgICB2YXIgdXNlckFkZHJlc3NTZXQgPSBpZFJlcG9zaXRvcnkuZ2V0QXR0cmlidXRlKHVzZXJuYW1lLCAicG9zdGFsQWRkcmVzcyIpOwogICAgaWYgKHVzZXJBZGRyZXNzU2V0ID09IG51bGwgfHwgdXNlckFkZHJlc3NTZXQuaXNFbXB0eSgpKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIGFkZHJlc3Mgc3BlY2lmaWVkIGZvciB1c2VyOiAiICsgdXNlcm5hbWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKQp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"da56fe60-8b38-4c46-a405-d6b306d4b336\",\"name\":\"OAuth2 Evaluate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Evaluation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcG9wdWxhdGUgdGhlIHNjb3BlcyB3aXRoIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlcyB3aGVuIHRoZSB0b2tlbmluZm8gZW5kcG9pbnQgaXMgY2FsbGVkLgogKiBGb3IgZXhhbXBsZSwgaWYgb25lIG9mIHRoZSBzY29wZXMgaXMgbWFpbCwgQU0gc2V0cyBtYWlsIHRvIHRoZSByZXNvdXJjZSBvd25lcidzIGVtYWlsIGFkZHJlc3MgaW4gdGhlIHRva2VuIGluZm9ybWF0aW9uIHJldHVybmVkLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDIpLgogKiAgICAgICAgICAgIFRoZSBjbGllbnQncyBpZGVudGl0eSBpZiBwcmVzZW50IG9yIHRoZSByZXNvdXJjZSBvd25lcidzIGlkZW50aXR5LiBDYW4gYmUgbnVsbC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0VWQUxVQVRFX1NDT1BFCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoMykuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIGEgTWFwPFN0cmluZywgT2JqZWN0PiBvZiB0aGUgYWNjZXNzIHRva2VuJ3MgaW5mb3JtYXRpb24gKDQpLgogKgogKiBDbGFzcyByZWZlcmVuY2U6CiAqICgxKSBBY2Nlc3NUb2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vYXV0aDIvY29yZS9BY2Nlc3NUb2tlbi5odG1sLgogKiAoMikgQU1JZGVudGl0eSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9pZG0vQU1JZGVudGl0eS5odG1sLgogKiAoMykgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBldmFsdWF0ZSBzY29wZSBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCihmdW5jdGlvbiAoKSB7CiAgICB2YXIgbWFwID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7CiAgICBpZiAoaWRlbnRpdHkgIT09IG51bGwpIHsKICAgICAgICB2YXIgc2NvcGVzID0gYWNjZXNzVG9rZW4uZ2V0U2NvcGUoKS50b0FycmF5KCk7CiAgICAgICAgc2NvcGVzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKHNjb3BlKS50b0FycmF5KCk7CiAgICAgICAgICAgIG1hcC5wdXQoc2NvcGUsIGF0dHJpYnV0ZXMuam9pbigiLCIpKTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLmVycm9yKCdpZGVudGl0eSBpcyBudWxsJyk7CiAgICB9CiAgICByZXR1cm4gbWFwOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_EVALUATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1d475815-72cb-42eb-aafd-4026989d28a7\",\"name\":\"Social Identity Provider Profile Transformation Script\",\"description\":\"Default global script for Social Identity Provider Profile Transformation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyogRGVmYXVsdCBTb2NpYWwgSWRlbnRpdHkgUHJvdmlkZXIgUHJvZmlsZSBUcmFuc2Zvcm1hdGlvbiBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzICovCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"835c3d04-4883-4fb7-b957-bd6ff6ff9d50\",\"name\":\"Prepare Account Creation\",\"description\":\"Set username from email and copy first and last name to applicant attributes.\",\"script\":\"LyogUHJlcGFyZSBBY2NvdW50IENyZWF0aW9uCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIFNldCB1c2VybmFtZSBmcm9tIGVtYWlsIGFuZCBjb3B5IGZpcnN0IGFuZCBsYXN0IG5hbWUgdG8gYXBwbGljYW50IGF0dHJpYnV0ZXMuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICovCihmdW5jdGlvbiAoKSB7CiAgb3V0Y29tZSA9ICJ0cnVlIjsKCiAgc2hhcmVkU3RhdGUucHV0KCJ1c2VybmFtZSIsIGdldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgibWFpbCIpKQogIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgidXNlck5hbWUiLCBnZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoIm1haWwiKSkKICBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoImN1c3RvbV92ZXJpZmllZEZpcnN0TmFtZSIsIGdldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgiZ2l2ZW5OYW1lIikpCiAgc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKCJjdXN0b21fdmVyaWZpZWRMYXN0TmFtZSIsIGdldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgic24iKSkKICBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoImN1c3RvbV92ZXJpZnlTdGF0dXMiLCAnTm90IHZlcmlmaWVkJykKCiAgLyoKICAgKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7CiAgICAgICB2YXIgc3RvcmFnZSA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwogICAgICBpZiAoc3RvcmFnZSAmJiB2YWx1ZSkgewogICAgICAgICAgaWYgKHN0b3JhZ2UucHV0KSB7CiAgICAgICAgICAgICAgICBzdG9yYWdlLnB1dChuYW1lLCB2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICBzdG9yYWdlW25hbWVdID0gdmFsdWU7CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSBpZiAodmFsdWUpIHsKICAgICAgICAgIHNoYXJlZFN0YXRlLnB1dCgib2JqZWN0QXR0cmlidXRlcyIsIEpTT04ucGFyc2UoIntcIiIrbmFtZSsiXCI6XCIiK3ZhbHVlKyJcIn0iKSk7CiAgICAgIH0KICB9CgogIC8qCiAgICogUmVhZCBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gZ2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKG5hbWUpIHsKICAgICAgdmFyIHN0b3JhZ2UgPSBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgICAgaWYgKHN0b3JhZ2UpIHsKICAgICAgICAgIGlmIChzdG9yYWdlLmdldCkgewogICAgICAgICAgICAgIHJldHVybiBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKS5nZXQobmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICByZXR1cm4gc3RvcmFnZS5uYW1lOwogICAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogIH0KfSgpKTsK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"25e6c06d-cf70-473b-bd28-26931edc476b\",\"name\":\"OAuth2 Validate Scope Script\",\"description\":\"Default global script for OAuth2 Scope Validation\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgdmFsaWRhdGVzIHRoZSByZXF1ZXN0ZWQgc2NvcGVzIGFnYWluc3QgdGhlIGFsbG93ZWQgc2NvcGVzLgogKiBJZiBubyBzY29wZXMgYXJlIHJlcXVlc3RlZCwgZGVmYXVsdCBzY29wZXMgYXJlIGFzc3VtZWQuCiAqIFRoZSBzY3JpcHQgaGFzIGZvdXIgdG9wIGxldmVsIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgZGlmZmVyZW50IE9BdXRoMiBmbG93czoKICogICAgICAtIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlCiAqICAgICAgLSB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUKICogICAgICAtIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUKICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHJlcXVlc3RlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgVGhlIHNldCBvZiByZXF1ZXN0ZWQgc2NvcGVzLgogKiBkZWZhdWx0U2NvcGVzIC0gU2V0PFN0cmluZz4gKDEpLgogKiAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBkZWZhdWx0IHNjb3Blcy4KICogYWxsb3dlZFNjb3BlcyAtIFNldDxTdHJpbmc+ICgxKS4KICogICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgYWxsb3dlZCBzY29wZXMuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlIGRlYnVnIGxvZ2dlciBpbnN0YW5jZToKICogICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogICAgICAgICAgQ29ycmVzcG9uZGluZyBsb2cgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9BVVRIMl9WQUxJREFURV9TQ09QRQogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKgogKiBUaHJvd3MgSW52YWxpZFNjb3BlRXhjZXB0aW9uOgogKiAgICAgIC0gaWYgdGhlcmUgYXJlIG5vIHNjb3BlcyByZXF1ZXN0ZWQgYW5kIGRlZmF1bHQgc2NvcGVzIGFyZSBlbXB0eQogKiAgICAgIC0gaWYgYSByZXF1ZXN0ZWQgc2NvcGUgaXMgbm90IGFsbG93ZWQKICoKICogUmV0dXJuIC0gYSBTZXQ8U3RyaW5nPiBvZiB2YWxpZGF0ZWQgc2NvcGVzICgxKS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICgyKSBDbGllbnQgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svaHR0cC9DbGllbnQuaHRtbC4KICovCgovKioKICogRGVmYXVsdCB2YWxpZGF0ZSBzY29wZSBzY3JpcHQuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZVNjb3BlcyAoKSB7CiAgICB2YXIgZnJKYXZhID0gSmF2YUltcG9ydGVyKAogICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkU2NvcGVFeGNlcHRpb24KICAgICk7CgogICAgdmFyIHNjb3BlczsKICAgIGlmIChyZXF1ZXN0ZWRTY29wZXMgPT0gbnVsbCB8fCByZXF1ZXN0ZWRTY29wZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgc2NvcGVzID0gZGVmYXVsdFNjb3BlczsKICAgIH0gZWxzZSB7CiAgICAgICAgc2NvcGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KGFsbG93ZWRTY29wZXMpOwogICAgICAgIHNjb3Blcy5yZXRhaW5BbGwocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICBpZiAocmVxdWVzdGVkU2NvcGVzLnNpemUoKSA+IHNjb3Blcy5zaXplKCkpIHsKICAgICAgICAgICAgdmFyIGludmFsaWRTY29wZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQocmVxdWVzdGVkU2NvcGVzKTsKICAgICAgICAgICAgaW52YWxpZFNjb3Blcy5yZW1vdmVBbGwoYWxsb3dlZFNjb3Blcyk7CiAgICAgICAgICAgIHRocm93IG5ldyBmckphdmEuSW52YWxpZFNjb3BlRXhjZXB0aW9uKCdVbmtub3duL2ludmFsaWQgc2NvcGUocyknKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHNjb3BlcyA9PSBudWxsIHx8IHNjb3Blcy5pc0VtcHR5KCkpIHsKICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRTY29wZUV4Y2VwdGlvbignTm8gc2NvcGUgcmVxdWVzdGVkIGFuZCBubyBkZWZhdWx0IHNjb3BlIGNvbmZpZ3VyZWQnKTsKICAgIH0KICAgIHJldHVybiBzY29wZXM7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQXV0aG9yaXphdGlvblNjb3BlICgpIHsKICAgIHJldHVybiB2YWxpZGF0ZVNjb3BlcygpOwp9CgpmdW5jdGlvbiB2YWxpZGF0ZUFjY2Vzc1Rva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlUmVmcmVzaFRva2VuU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlQmFja0NoYW5uZWxBdXRob3JpemF0aW9uU2NvcGUgKCkgewogICAgcmV0dXJuIHZhbGlkYXRlU2NvcGVzKCk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_VALIDATE_SCOPE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"01e1a3c0-038b-4c16-956a-6c9d89328cff\",\"name\":\"Authentication Tree Decision Node Script\",\"description\":\"Default global script for a scripted decision node\",\"script\":\"LyoKICAtIERhdGEgbWFkZSBhdmFpbGFibGUgYnkgbm9kZXMgdGhhdCBoYXZlIGFscmVhZHkgZXhlY3V0ZWQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc2hhcmVkU3RhdGUgdmFyaWFibGUuCiAgLSBUaGUgc2NyaXB0IHNob3VsZCBzZXQgb3V0Y29tZSB0byBlaXRoZXIgInRydWUiIG9yICJmYWxzZSIuCiAqLwoKb3V0Y29tZSA9ICJ0cnVlIjsK\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c234ba0b-58a1-4cfd-9567-09edde980745\",\"name\":\"ForgeRock Internal: OAuth2 Access Token Modification Script\",\"description\":\"Internal token modification script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwovLyBTY3JpcHQgaXMgaW50ZW50aW9uYWxseSBlbXB0eQo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":1433147666269,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"403cf226-6051-4368-8b72-9ba14f9a5140\",\"name\":\"VKontakte Profile Normalization\",\"description\":\"Normalizes raw profile data from VKontakte\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJnaXZlbk5hbWUiLCByYXdQcm9maWxlLmZpcnN0X25hbWUpLAogICAgICAgIGZpZWxkKCJmYW1pbHlOYW1lIiwgcmF3UHJvZmlsZS5sYXN0X25hbWUpLAogICAgICAgIGZpZWxkKCJwaG90b1VybCIsIHJhd1Byb2ZpbGUucGhvdG9fNTApLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpKSkK\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"870f0298-2f96-4e10-990d-3436fc2f3c43\",\"name\":\"Check Resolved Username - imported (1)\",\"description\":\"Check if username has already been resolved to _id.\",\"script\":\"LyogUmVzb2x2ZSBVc2VybmFtZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDaGVjayBpZiB1c2VybmFtZSBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkIHRvIF9pZC4KICogUmV0dXJuICJ0cnVlIiBpZiByZXNvbHZlZCwgImZhbHNlIiBvdGhlcndpc2UuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogLSBmYWxzZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIGlmIChub2RlU3RhdGUuZ2V0KCJfaWQiKSkgewogICAgICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gImZhbHNlIjsKICAgIH0KfSgpKTsK\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"a7a78773-445b-4eca-bb93-409e86bced81\",\"name\":\"GitHub Profile Normalization\",\"description\":\"Normalizes raw profile data from GitHub\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjIgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgiZGlzcGxheU5hbWUiLCByYXdQcm9maWxlLm5hbWUpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUubG9naW4pKSkK\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9de3eb62-f131-4fac-a294-7bd170fd4acb\",\"name\":\"Scripted Policy Condition\",\"description\":\"Default global script for Scripted Policy Conditions\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTUtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qKgogKiBUaGlzIGlzIGEgUG9saWN5IENvbmRpdGlvbiBleGFtcGxlIHNjcmlwdC4gSXQgZGVtb25zdHJhdGVzIGhvdyB0byBhY2Nlc3MgYSB1c2VyJ3MgaW5mb3JtYXRpb24sCiAqIHVzZSB0aGF0IGluZm9ybWF0aW9uIGluIGV4dGVybmFsIEhUVFAgY2FsbHMgYW5kIG1ha2UgYSBwb2xpY3kgZGVjaXNpb24gYmFzZWQgb24gdGhlIG91dGNvbWUuCiAqLwoKdmFyIHVzZXJBZGRyZXNzLCB1c2VySVAsIHJlc291cmNlSG9zdDsKCmlmICh2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkpIHsKCiAgICB2YXIgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9IGdldENvdW50cnlGcm9tVXNlckFkZHJlc3MoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJDb3VudHJ5IHJldHJpZXZlZCBmcm9tIHVzZXIncyBhZGRyZXNzOiAiICsgY291bnRyeUZyb21Vc2VyQWRkcmVzcyk7CiAgICB2YXIgY291bnRyeUZyb21Vc2VySVAgPSBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpOwogICAgbG9nZ2VyLm1lc3NhZ2UoIkNvdW50cnkgcmV0cmlldmVkIGZyb20gdXNlcidzIElQOiAiICsgY291bnRyeUZyb21Vc2VySVApOwogICAgdmFyIGNvdW50cnlGcm9tUmVzb3VyY2VVUkkgPSBnZXRDb3VudHJ5RnJvbVJlc291cmNlVVJJKCk7CiAgICBsb2dnZXIubWVzc2FnZSgiQ291bnRyeSByZXRyaWV2ZWQgZnJvbSByZXNvdXJjZSBVUkk6ICIgKyBjb3VudHJ5RnJvbVJlc291cmNlVVJJKTsKCiAgICBpZiAoY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21Vc2VySVAgJiYgY291bnRyeUZyb21Vc2VyQWRkcmVzcyA9PT0gY291bnRyeUZyb21SZXNvdXJjZVVSSSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIFN1Y2NlZWRlZCIpOwogICAgICAgIHJlc3BvbnNlQXR0cmlidXRlcy5wdXQoImNvdW50cnlPZk9yaWdpbiIsIFtjb3VudHJ5RnJvbVVzZXJBZGRyZXNzXSk7CiAgICAgICAgYXV0aG9yaXplZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJBdXRob3JpemF0aW9uIEZhaWxlZCIpOwogICAgICAgIGF1dGhvcml6ZWQgPSBmYWxzZTsKICAgIH0KCn0gZWxzZSB7CiAgICBsb2dnZXIubWVzc2FnZSgiUmVxdWlyZWQgcGFyYW1ldGVycyBub3QgZm91bmQuIEF1dGhvcml6YXRpb24gRmFpbGVkLiIpOwogICAgYXV0aG9yaXplZCA9IGZhbHNlOwp9CgovKioKICogVXNlIHRoZSB1c2VyJ3MgYWRkcmVzcyB0byBsb29rdXAgdGhlaXIgY291bnRyeSBvZiByZXNpZGVuY2UuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgdXNlcidzIGNvdW50cnkgb2YgcmVzaWRlbmNlLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21Vc2VyQWRkcmVzcygpIHsKCiAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgcmVxdWVzdC5zZXRVcmkoImh0dHA6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2dlb2NvZGUvanNvbj9hZGRyZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXNlckFkZHJlc3MpKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgZ2VvY29kZSA9IEpTT04ucGFyc2UocmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0U3RyaW5nKCkpOwogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvY29kZS5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGdlb2NvZGUucmVzdWx0c1tpXTsKICAgICAgICB2YXIgajsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgcmVzdWx0LmFkZHJlc3NfY29tcG9uZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocmVzdWx0LmFkZHJlc3NfY29tcG9uZW50c1tpXS50eXBlc1swXSA9PSAiY291bnRyeSIpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkcmVzc19jb21wb25lbnRzW2ldLmxvbmdfbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFVzZSB0aGUgdXNlcidzIElQIHRvIGxvb2t1cCB0aGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBmcm9tIHdoaWNoIHRoZSByZXF1ZXN0IG9yaWdpbmF0ZWQuCiAqLwpmdW5jdGlvbiBnZXRDb3VudHJ5RnJvbVVzZXJJUCgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgdXNlcklQKTsKICAgICAgcmVxdWVzdC5zZXRNZXRob2QoIkdFVCIpOwoKICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXQoKTsKICAgIGxvZ1Jlc3BvbnNlKHJlc3BvbnNlKTsKCiAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdC5jb3VudHJ5OwogICAgfQp9CgovKioKICogVXNlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UncyBob3N0IG5hbWUgdG8gbG9va3VwIHRoZSBjb3VudHJ5IHdoZXJlIHRoZSByZXNvdXJjZSBpcyBob3N0ZWQuCiAqCiAqIEByZXR1cm5zIHsqfSBUaGUgY291bnRyeSBpbiB3aGljaCB0aGUgcmVzb3VyY2UgaXMgaG9zdGVkLgogKi8KZnVuY3Rpb24gZ2V0Q291bnRyeUZyb21SZXNvdXJjZVVSSSgpIHsKICAgIHZhciByZXF1ZXN0ID0gbmV3IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5SZXF1ZXN0KCk7CiAgICByZXF1ZXN0LnNldFVyaSgiaHR0cDovL2lwLWFwaS5jb20vanNvbi8iICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc291cmNlSG9zdCkpOwogICAgICByZXF1ZXN0LnNldE1ldGhvZCgiR0VUIik7CgogICAgdmFyIHJlc3BvbnNlID0gaHR0cENsaWVudC5zZW5kKHJlcXVlc3QpLmdldCgpOwogICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwoKICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpLmdldFN0cmluZygpKTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0LmNvdW50cnk7CiAgICB9Cn0KCi8qKgogKiBSZXRyaWV2ZSBhbmQgdmFsaWRhdGUgdGhlIHZhcmlhYmxlcyByZXF1aXJlZCB0byBtYWtlIHRoZSBleHRlcm5hbCBIVFRQIGNhbGxzLgogKgogKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2lsbCBiZSB0cnVlIGlmIHZhbGlkYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCiAqLwpmdW5jdGlvbiB2YWxpZGF0ZUFuZEluaXRpYWxpemVQYXJhbWV0ZXJzKCkgewogICAgdmFyIHVzZXJBZGRyZXNzU2V0ID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlKCJwb3N0YWxBZGRyZXNzIik7CiAgICBpZiAodXNlckFkZHJlc3NTZXQgPT0gbnVsbCB8fCB1c2VyQWRkcmVzc1NldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gYWRkcmVzcyBzcGVjaWZpZWQgZm9yIHVzZXI6ICIgKyB1c2VybmFtZSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdXNlckFkZHJlc3MgPSB1c2VyQWRkcmVzc1NldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIGFkZHJlc3M6ICIgKyB1c2VyQWRkcmVzcyk7CgogICAgaWYgKCFlbnZpcm9ubWVudCkgewogICAgICAgIGxvZ2dlci53YXJuaW5nKCJObyBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUgZXZhbHVhdGlvbiByZXF1ZXN0LiIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2YXIgaXBTZXQgPSBlbnZpcm9ubWVudC5nZXQoIklQIik7CiAgICBpZiAoaXBTZXQgPT0gbnVsbCB8fCBpcFNldC5pc0VtcHR5KCkpIHsKICAgICAgICBsb2dnZXIud2FybmluZygiTm8gSVAgc3BlY2lmaWVkIGluIHRoZSBldmFsdWF0aW9uIHJlcXVlc3QgZW52aXJvbm1lbnQgcGFyYW1ldGVycy4iKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB1c2VySVAgPSBpcFNldC5pdGVyYXRvcigpLm5leHQoKTsKICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyIElQOiAiICsgdXNlcklQKTsKCiAgICBpZiAoIXJlc291cmNlVVJJKSB7CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoIk5vIHJlc291cmNlIFVSSSBzcGVjaWZpZWQuIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmVzb3VyY2VIb3N0ID0gcmVzb3VyY2VVUkkubWF0Y2goL14oLio6XC9cLykod3d3XC4pPyhbQS1aYS16MC05XC1cLl0rKSg6WzAtOV0rKT8oLiopJC8pWzNdOwogICAgbG9nZ2VyLm1lc3NhZ2UoIlJlc291cmNlIGhvc3Q6ICIgKyByZXNvdXJjZUhvc3QpOwoKICAgIHJldHVybiB0cnVlOwp9CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7Cn0K\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"POLICY_CONDITION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"bae1d54a-e97d-4997-aa5d-c027f21af82c\",\"name\":\"Facebook Profile Normalization\",\"description\":\"Normalizes raw profile data from Facebook\",\"script\":\"Ii8qXG4gKiBDb3B5cmlnaHQgMjAyMCBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBVc2Ugb2YgdGhpcyBjb2RlIHJlcXVpcmVzIGEgY29tbWVyY2lhbCBzb2Z0d2FyZSBsaWNlbnNlIHdpdGggRm9yZ2VSb2NrIEFTLlxuICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdFxuICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuXG4gKi9cblxuaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvblxuaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdFxuXG5yZXR1cm4ganNvbihvYmplY3QoXG4gICAgICAgIGZpZWxkKFwiaWRcIiwgcmF3UHJvZmlsZS5pZCksXG4gICAgICAgIGZpZWxkKFwiZGlzcGxheU5hbWVcIiwgcmF3UHJvZmlsZS5uYW1lKSxcbiAgICAgICAgZmllbGQoXCJnaXZlbk5hbWVcIiwgcmF3UHJvZmlsZS5maXJzdF9uYW1lKSxcbiAgICAgICAgZmllbGQoXCJmYW1pbHlOYW1lXCIsIHJhd1Byb2ZpbGUubGFzdF9uYW1lKSxcbiAgICAgICAgZmllbGQoXCJwaG90b1VybFwiLCByYXdQcm9maWxlLnBpY3R1cmUuZGF0YS51cmwpLFxuICAgICAgICBmaWVsZChcImVtYWlsXCIsIHJhd1Byb2ZpbGUuZW1haWwpLFxuICAgICAgICBmaWVsZChcInVzZXJuYW1lXCIsIHJhd1Byb2ZpbGUuZW1haWwpKSkiCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c827d2b4-3608-4693-868e-bbcf86bd87c7\",\"name\":\"Scripted Module - Client Side\",\"description\":\"Default global script for client side Scripted Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTYtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCi8qIERlZmF1bHQgQXV0aGVudGljYXRpb24gY2xpZW50IHNpZGUgc2NyaXB0IHRvIHVzZSBhcyBhIHRlbXBsYXRlIGZvciBuZXcgc2NyaXB0cyAqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"5e854779-6ec1-4c39-aeba-0477e0986646\",\"name\":\"Config Provider Node Script\",\"description\":\"Script to provide values for a config provider node\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKioKICogVGhlIGZvbGxvd2luZyBzY3JpcHQgaXMgYSBzaW1wbGlmaWVkIHRlbXBsYXRlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0byBidWlsZAogKiB1cCBhIGNvbmZpZyBNYXAgb2JqZWN0IHdpdGggY3VzdG9tIHZhbHVlcy4gVGhlIENvbmZpZyBQcm92aWRlciBOb2RlIHdpbGwgdGhlbgogKiBwcm92aWRlIHRoaXMgY29uZmlnIE1hcCB0byB0aGUgZGVzaXJlZCBub2RlIHR5cGUuIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBNYXAKICogeW91IGJ1aWxkIGhlcmUgaXMgbmFtZWQgJ2NvbmZpZycuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKgogKiBub2RlU3RhdGUgLSBOb2RlIFN0YXRlICgxKQogKiAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoaXMgcmVwcmVzZW50cyB0aGUgY3VycmVudCB2YWx1ZXMgc3RvcmVkIGluIHRoZSBub2RlIHN0YXRlLgogKgogKiBpZFJlcG9zaXRvcnkgLSBQcm9maWxlIERhdGEgKDIpCiAqICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgYSByZXBvc2l0b3J5IHRvIHJldHJpZXZlIHVzZXIgaW5mb3JtYXRpb24uCiAqCiAqIHNlY3JldHMgLSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAoMykKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBTZWNyZXRzIEFQSSBmcm9tIGEgc2NyaXB0aW5nIGNvbnRleHQuCiAqCiAqIHJlcXVlc3RIZWFkZXJzICg0KSAtIE1hcCAoNSkKICogICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2Nlc3NpbmcgaGVhZGVycyBpbiB0aGUgbG9naW4gcmVxdWVzdC4KICoKICogbG9nZ2VyIC0gRGVidWcgTG9nZ2luZyAoNikKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2UuCiAqCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoNykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cy4KICoKICogcmVhbG0gLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgbmFtZSBvZiB0aGUgcmVhbG0gdGhlIHVzZXIgaXMgYXV0aGVudGljYXRpbmcgdG8uCiAqCiAqIGV4aXN0aW5nU2Vzc2lvbiAtIE1hcDxTdHJpbmcsIFN0cmluZz4gKDUpCiAqICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LiBUaGUgcmV0dXJuZWQgbWFwIGZyb20KICogICAgICAgICAgU1NPVG9rZW4uZ2V0UHJvcGVydGllcygpICg4KQogKgogKiByZXF1ZXN0UGFyYW1ldGVycyAtIE1hcCAoNSkKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCBwYXJhbWV0ZXJzLgogKgogKgogKiBPdXRwdXRzOgogKgogKiBjb25maWcgLSBNYXAgKDUpCiAqICAgICAgICAgICBEZWZpbmUgYW5kIGZpbGwgYSBNYXAgb2JqZWN0IG5hbWVkICdjb25maWcnIHdpdGggY3VzdG9tIHZhbHVlcywgdGhpcyB3aWxsIGRlZmluZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlCiAqICAgICAgICAgICBhc3NvY2lhdGVkIG5vZGUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ1Byb3ZpZGVyTm9kZS4KICoKICogUmVmZXJlbmNlOgogKiAoMSkgTm9kZSBTdGF0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9pZGNsb3VkLWFtL2xhdGVzdC9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtbm9kZVN0YXRlCiAqICgyKSBQcm9maWxlIERhdGEgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy4xL2F1dGhlbnRpY2F0aW9uLWd1aWRlL3NjcmlwdGluZy1hcGktbm9kZS5odG1sI3NjcmlwdGluZy1hcGktbm9kZS1pZC1yZXBvCiAqICgzKSBDcmVkZW50aWFscyBhbmQgU2VjcmV0cyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83LjEvYXV0aGVudGljYXRpb24tZ3VpZGUvc2NyaXB0aW5nLWFwaS1ub2RlLmh0bWwjc2NyaXB0aW5nLWFwaS1hdXRobi1zZWNyZXRzCiAqICg0KSBSZXF1ZXN0IEhlYWRlcnMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hdXRoZW50aWNhdGlvbi1ndWlkZS9zY3JpcHRpbmctYXBpLW5vZGUuaHRtbCNzY3JpcHRpbmctYXBpLW5vZGUtcmVxdWVzdEhlYWRlcnMuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL01hcC5odG1sCiAqICg2KSBEZWJ1ZyBMb2dnaW5nIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWxvZ2dlci4KICogKDcpIEhUVFAgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICg4KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqLwoKY29uZmlnID0gewogICAgImtleTAiOiB7InN1YktleSI6ICJ2YWx1ZTAifSwKICAgICJrZXkxIjogInZhbHVlMSIKfTsK\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"CONFIG_PROVIDER_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"6c49bebe-3a62-11ed-a261-0242ac120002\",\"name\":\"Library Script\",\"description\":\"Default global library script to be referenced from other scripts\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjItMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIGlzIGFuIGV4YW1wbGUgbGlicmFyeSBzY3JpcHQgd2l0aCBtZXRob2RzIHRoYXQgY2FuIGJlIHVzZWQgaW4gb3RoZXIgc2NyaXB0cy4KICogVG8gcmVmZXJlbmNlIGl0LCB1c2UgdGhlIGZvbGxvd2luZzoKICoKICogdmFyIGxpYnJhcnkgPSByZXF1aXJlKCJMaWJyYXJ5IFNjcmlwdCIpOwogKgogKiBsaWJyYXJ5LmxvZ0Vycm9yKGxvZ2dlciwgIkVycm9yIG1lc3NhZ2UiKTsKICogbGlicmFyeS5sb2dEZWJ1Zyhsb2dnZXIsICJEZWJ1ZyBtZXNzYWdlIik7CiAqLwoKZnVuY3Rpb24gbG9nRXJyb3IobG9nLCBlcnJvck1lc3NhZ2UpIHsKICBsb2cuZXJyb3IoZXJyb3JNZXNzYWdlKTsKfQoKZnVuY3Rpb24gbG9nV2FybmluZyhsb2csIHdhcm5pbmdNZXNzYWdlKSB7CiAgbG9nLndhcm4od2FybmluZ01lc3NhZ2UpOwp9CgpleHBvcnRzLmxvZ0Vycm9yID0gbG9nRXJyb3I7CmV4cG9ydHMubG9nV2FybmluZyA9IGxvZ1dhcm5pbmc7CgovLyBBbHRlcm5hdGl2ZWx5LCBleHBvcnRzIGNhbiBiZSBkZWNsYXJlZCB1c2luZyBhbiBpbmxpbmUgYXJyb3cgZnVuY3Rpb24KCmV4cG9ydHMubG9nSW5mbyA9IChsb2csIGluZm9NZXNzYWdlKSA9PiBsb2cuaW5mbyhpbmZvTWVzc2FnZSk7CmV4cG9ydHMubG9nRGVidWcgPSAobG9nLCBkZWJ1Z01lc3NhZ2UpID0+IGxvZy5kZWJ1ZyhkZWJ1Z01lc3NhZ2UpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"LIBRARY\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"3f93ef6e-e54a-4393-aba1-f322656db28a\",\"name\":\"OAuth2 Authorize Endpoint Data Provider Script\",\"description\":\"Default global script for OAuth2 Authorize Endpoint Data Provider\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBzY3JpcHQgbGV0cyB5b3UgcmV0dXJuIGFkZGl0aW9uYWwgZGF0YSB3aGVuIGF1dGhvcml6ZSByZXF1ZXN0IGlzIGNhbGxlZC4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFByZXNlbnQgaWYgdGhlIHJlcXVlc3QgY29udGFpbnMgdGhlIHNlc3Npb24gY29va2llLCB0aGUgdXNlcidzIHNlc3Npb24gb2JqZWN0LgogKgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDIpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIGNsaWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgZXh0ZXJuYWwgSFRUUCByZXF1ZXN0cwogKgogKiBsb2dnZXIgLSBEZWJ1ZyAoMykKICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSAiU2NyaXB0ZWRBdXRob3JpemVFbmRwb2ludERhdGFQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FVVEhPUklaRV9FTkRQT0lOVF9EQVRBX1BST1ZJREVSLgogKgogKiBzY3JpcHROYW1lIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHNjcmlwdAogKgogKiBSZXR1cm4gLSBhIE1hcDxTdHJpbmcsIFN0cmluZz4gb2YgYWRkaXRpb25hbCBkYXRhICg0KS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgQ2xpZW50IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL2h0dHAvQ2xpZW50Lmh0bWwuCiAqICgzKSBEZWJ1ZyAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICg0KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbC4KICovCgovKioKICogRGVmYXVsdCBhdXRob3JpemUgZW5kcG9pbnQgZGF0YSBwcm92aWRlciBzY3JpcHQgdG8gdXNlIGFzIGEgdGVtcGxhdGUgZm9yIG5ldyBzY3JpcHRzLgogKi8KCi8qIEVYQU1QTEUKdmFyIG1hcCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGEoKSB7CgogICAgLy9JZiBjb25zdGFudCBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkCiAgICBtYXAucHV0KCJoZWxsbyIsICJ3b3JsZCIpOwoKICAgIC8vSWYgc29tZSBkYXRhIG5lZWRzIHRvIGJlIHJldHVybmVkIGZyb20gdGhpcmQgcGFydHkgc2VydmljZQogICAgYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCk7CgogICAgLy9JZiB0aGVyZSBpcyBhIG5lZWQgdG8gcmV0dXJuIHNvbWUgdXNlciBzZXNzaW9uIGRhdGEKICAgIGFkZEFkZGl0aW9uYWxEYXRhRnJvbVNlc3Npb25Qcm9wZXJ0aWVzKCkKCiAgICByZXR1cm4gbWFwOwp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tRXh0ZXJuYWxTZXJ2aWNlKCkgewogIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLlNlcnZlckV4Y2VwdGlvbgogICAgKTsKICB0cnkgewogICAgICAgIC8vT2J0YWluIGFkZGl0aW9uYWwgZGF0YSBieSBwZXJmb3JtaW5nIGEgUkVTVCBjYWxsIHRvIGFuIGV4dGVybmFsIHNlcnZpY2UKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuUmVxdWVzdCgpOwogICAgICAgIHJlcXVlc3Quc2V0VXJpKCJodHRwczovL3RoaXJkLnBhcnR5LmFwcC9oZWxsby5qc3AiKTsKICAgICAgICByZXF1ZXN0LnNldE1ldGhvZCgiUE9TVCIpOwogICAgICAgIC8vcmVxdWVzdC5zZXRFbnRpdHkoImZvbz1iYXImaGVsbG89d29ybGQiKTsKICAgICAgICByZXF1ZXN0LnNldEVudGl0eShqc29uKG9iamVjdCgKICAgICAgICAgICAgICAgICAgICBmaWVsZCgiZm9vIiwgImJhciIpKSkpOwogICAgICAgIHZhciByZXNwb25zZSA9IGh0dHBDbGllbnQuc2VuZChyZXF1ZXN0KS5nZXRPclRocm93KCk7CiAgICAgICAgbG9nUmVzcG9uc2UocmVzcG9uc2UpOwogICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICBtYXAucHV0KCJzb21lS2V5IixyZXN1bHQuZ2V0KCJzb21lS2V5IikpOwogIH0gY2F0Y2ggKGVycikgewogICAgIHRocm93IG5ldyBmckphdmEuU2VydmVyRXhjZXB0aW9uKGVycik7CiAgfQp9OwoKZnVuY3Rpb24gYWRkQWRkaXRpb25hbERhdGFGcm9tU2Vzc2lvblByb3BlcnRpZXMoKSB7CiAgLy9BZGQgYWRkaXRpb25hbCBkYXRhIGZyb20gc2Vzc2lvbiBwcm9wZXJ0eSB2YWx1ZXMKICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeyAvLyBzZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIHJlc291cmNlIG93bmVyIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGdyYW50CiAgICAgbWFwLnB1dCgiaXBBZGRyZXNzIiwgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgiSG9zdCIpKQogICB9Cn07CgpmdW5jdGlvbiBsb2dSZXNwb25zZShyZXNwb25zZSkgewogICAgbG9nZ2VyLm1lc3NhZ2UoIlVzZXIgUkVTVCBDYWxsLiBTdGF0dXM6ICIgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICIsIEJvZHk6ICIgKyByZXNwb25zZS5nZXRFbnRpdHkoKSk7Cn07CgphZGRBZGRpdGlvbmFsRGF0YSgpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"name\":\"Check Username\",\"description\":\"Check if username has already been collected.\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1f389a3d-21cf-417c-a6d3-42ea620071f0\",\"name\":\"ForgeRock Internal: OIDC Claims Script\",\"description\":\"Internal OIDC Claims script\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"name\":\"Remove Button\",\"description\":\"Remove button from page.\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"449ef739-828e-42b4-92d6-0456d378671e\",\"name\":\"Bravo endUserUIClient OAuth2 Access Token Modification Script\",\"description\":\"Used by endUserUIClient\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykgfHwgc2NvcGVzLmNvbnRhaW5zKCdmcjppZGM6YW5hbHl0aWNzOionKSkgewogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBjb20uc3VuLmlkZW50aXR5LmlkbS5JZFR5cGUKICAgICk7CiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBpZGVudGl0eS5nZXRNZW1iZXJzaGlwcyhmci5JZFR5cGUuR1JPVVApLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkgewogICAgICBncm91cHMucHVzaChncm91cC5nZXRBdHRyaWJ1dGUoJ2NuJykudG9BcnJheSgpWzBdKTsKICAgIH0pOwogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"eaab5b6d-fc11-4365-93da-00eb9121adb9\",\"name\":\"Selfie Authentication Results\",\"description\":\"Show selfie authentication results\",\"script\":\"LyogU2VsZmllIEF1dGhlbnRpY2F0aW9uIFJlc3VsdHMKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogU2hvdyBzZWxmaWUgYXV0aGVudGljYXRpb24gcmVzdWx0cwogKiAKICogVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCBtYXkgbm90IHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwoKICB2YXIgcDFVc2VySWRBbUF0dHIgPSAnZnItYXR0ci1pc3RyMSc7CiAgdmFyIHAxVXNlcklkSWRtQXR0ciA9ICdmckluZGV4ZWRTdHJpbmcxJzsKICB2YXIgc2VsZmllQW1BdHRyID0gJ2ZyLWF0dHItc3RyMSc7CiAgdmFyIHNlbGZpZUlkbUF0dHIgPSAnZnJVbmluZGV4ZWRTdHJpbmcxJzsKICB2YXIgZmlyc3ROYW1lQXR0ciA9ICdnaXZlbk5hbWUnOwogIHZhciBsYXN0TmFtZUF0dHIgPSAnc24nOwogIAogIHZhciBpZGVudGl0eSA9IGlkUmVwb3NpdG9yeS5nZXRJZGVudGl0eShub2RlU3RhdGUuZ2V0KCdfaWQnKSk7CiAgdmFyIHAxVXNlcklkID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlVmFsdWVzKHAxVXNlcklkQW1BdHRyKVswXTsKICB2YXIgc2VsZmllID0gZ2V0T2JqZWN0QXR0cmlidXRlKHNlbGZpZUlkbUF0dHIpID8gZ2V0T2JqZWN0QXR0cmlidXRlKHNlbGZpZUlkbUF0dHIpIDogaWRlbnRpdHkuZ2V0QXR0cmlidXRlVmFsdWVzKHNlbGZpZUFtQXR0cilbMF07CiAgdmFyIGZpcnN0TmFtZSA9IGdldE9iamVjdEF0dHJpYnV0ZShmaXJzdE5hbWVBdHRyKSA/IGdldE9iamVjdEF0dHJpYnV0ZShmaXJzdE5hbWVBdHRyKSA6IGlkZW50aXR5LmdldEF0dHJpYnV0ZVZhbHVlcyhmaXJzdE5hbWVBdHRyKVswXTsKICB2YXIgbGFzdE5hbWUgPSBnZXRPYmplY3RBdHRyaWJ1dGUobGFzdE5hbWVBdHRyKSA/IGdldE9iamVjdEF0dHJpYnV0ZShsYXN0TmFtZUF0dHIpIDogaWRlbnRpdHkuZ2V0QXR0cmlidXRlVmFsdWVzKGxhc3ROYW1lQXR0cilbMF07CgogIHZhciBhbmNob3IgPSAnYW5jaG9yLScuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgdmFyIGhhbGlnbiA9ICdsZWZ0JzsKICB2YXIgcmVmZXJlbmNlSW1hZ2UgPSAnPGltZyBzcmM9ImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsICcrc2VsZmllKyciIGFsdD0iUmVmZXJlbmNlIEltYWdlIiBzdHlsZT0iaGVpZ2h0OiBhdXRvOyB3aWR0aDogMTAwJTsgb2JqZWN0LWZpdDogY292ZXIiIC8+JzsKICB2YXIgaWRlbnRpdHlUYWJsZSA9IGBcCiAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW4iPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDogNDklOyB0ZXh0LWFsaWduOiByaWdodDsiPkZpcnN0IE5hbWU8L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDIlOyI+OjwvdGQ+XAogICAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDogNDklOyB0ZXh0LWFsaWduOiBsZWZ0OyI+JHtmaXJzdE5hbWV9PC90ZD5cCiAgICAgICAgPC90cj5cCiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij5MYXN0IE5hbWU8L3RkPlwKICAgICAgICAgIDx0ZD46PC90ZD5cCiAgICAgICAgICA8dGQ+JHtsYXN0TmFtZX08L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgPC90YWJsZT5gOwogIHZhciBzZWxmaWVUYWJsZSA9IGBcCiAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW4iPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48aDQ+UmVmZXJlbmNlIEltYWdlPC9oND48L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgICA8dHIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij5cCiAgICAgICAgICA8dGQ+JHtyZWZlcmVuY2VJbWFnZX08L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgPC90YWJsZT5gOwogIHZhciBtZXNzYWdlID0gYFwKICAgICAgPHA+PGgzIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij5JZGVudGl0eTwvaDM+PC9wPlwKICAgICAgJHtpZGVudGl0eVRhYmxlfVwKICAgICAgPGJyLz4ke3NlbGZpZVRhYmxlfWA7CiAgdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICAgImRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NhbGxiYWNrLWNvbXBvbmVudCcpKS5mb3JFYWNoKFxuIikuY29uY2F0KAogICAgImZ1bmN0aW9uIChlKSB7XG4iKS5jb25jYXQoCiAgICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgICAiICBjb25zb2xlLmxvZygnaGVyZSEnKTtcbiIpLmNvbmNhdCgKICAgICIgIGlmIChtZXNzYWdlLmZpcnN0Q2hpbGQgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVOYW1lID09ICcjdGV4dCcgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVWYWx1ZS50cmltKCkgPT0gJyIpLmNvbmNhdChhbmNob3IpLmNvbmNhdCgiJykge1xuIikuY29uY2F0KAogICAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgICAiICAgIG1lc3NhZ2UuYWxpZ24gPSBcIiIpLmNvbmNhdChoYWxpZ24pLmNvbmNhdCgiXCI7XG4iKS5jb25jYXQoCiAgICAiICAgIG1lc3NhZ2UuaW5uZXJIVE1MID0gJyIpLmNvbmNhdChtZXNzYWdlKS5jb25jYXQoIic7XG4iKS5jb25jYXQoCiAgICAiICB9XG4iKS5jb25jYXQoCiAgICAifSkiKQogIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBjYWxsYmFja3NCdWlsZGVyLnRleHRPdXRwdXRDYWxsYmFjaygwLCBhbmNob3IpOwogICAgY2FsbGJhY2tzQnVpbGRlci5zY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soc2NyaXB0KTsKICB9IGVsc2UgewogICAgYWN0aW9uID0gYWN0aW9uLmdvVG8oJ3RydWUnKTsKICB9CiAgICAKICBmdW5jdGlvbiBnZXRSZXN1bHQobWV0YURhdGEsIHR5cGUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgaWYgKG1ldGFEYXRhICYmIHR5cGUpIHsKICAgICAgbWV0YURhdGEuX2VtYmVkZGVkLm1ldGFEYXRhLmZvckVhY2goKGl0KSA9PiB7CiAgICAgICAgaWYgKGl0LnR5cGUgPT09IHR5cGUpIHsKICAgICAgICAgIHJlc3VsdCA9IGl0OyAKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgICAKICBmdW5jdGlvbiBnZXRNaXRla1Jlc3VsdChtZXRhRGF0YSwgbmFtZSkgewogICAgdmFyIHJlc3VsdCA9IG51bGw7CiAgICB2YXIgbWl0ZWtSZXN1bHRzID0gZ2V0UmVzdWx0KG1ldGFEYXRhLCAnRE9DVU1FTlRfQVVUSEVOVElDQVRJT04nKTsKICAgIGlmIChtaXRla1Jlc3VsdHMgJiYgbmFtZSkgewogICAgICBtaXRla1Jlc3VsdHMuZGF0YS5taXRla1ZlcmlmaWNhdGlvbnMuZm9yRWFjaCgoaXQpID0+IHsKICAgICAgICBpZiAoaXQubmFtZSA9PT0gbmFtZSkgewogICAgICAgICAgcmVzdWx0ID0gaXQ7IAogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoKICAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICAqCiAgICogRXhhbXBsZToKICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICovCiAgZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbiAoYykgewogICAgICB2YXIgciA9IChNYXRoLnJhbmRvbSgpICogMTApIHwgMDsKICAgICAgdmFyIHYgPSByOwogICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKICB9CgogIC8qCiAgICogUmVhZCBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gZ2V0T2JqZWN0QXR0cmlidXRlKG5hbWUpIHsKICAgIHZhciBhdHRyaWJ1dGVzID0gbm9kZVN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwogICAgaWYgKGF0dHJpYnV0ZXMpIHsKICAgICAgaWYgKGF0dHJpYnV0ZXMuZ2V0KSB7CiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0KG5hbWUpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm5hbWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLyoKICAgKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7CiAgICB2YXIgYXR0cmlidXRlcyA9IG5vZGVTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgIGlmIChhdHRyaWJ1dGVzICYmIHZhbHVlKSB7CiAgICAgIGF0dHJpYnV0ZXMucHV0KG5hbWUsIHZhbHVlKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgib2JqZWN0QXR0cmlidXRlcyIsIGF0dHJpYnV0ZXMpOwogICAgfSBlbHNlIGlmICh2YWx1ZSkgewogICAgICBub2RlU3RhdGUucHV0U2hhcmVkKCJvYmplY3RBdHRyaWJ1dGVzIiwgeyBuYW1lOiB2YWx1ZSB9ICk7CiAgICB9CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"312e951f-70c5-49d2-a9ae-93aef909d5df\",\"name\":\"Salesforce Profile Normalization\",\"description\":\"Normalizes raw profile data from Salesforce\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLnVzZXJfaWQpLAogICAgICAgIGZpZWxkKCJkaXNwbGF5TmFtZSIsIHJhd1Byb2ZpbGUubmFtZSksCiAgICAgICAgZmllbGQoImdpdmVuTmFtZSIsIHJhd1Byb2ZpbGUuZ2l2ZW5fbmFtZSksCiAgICAgICAgZmllbGQoImZhbWlseU5hbWUiLCByYXdQcm9maWxlLmZhbWlseV9uYW1lKSwKICAgICAgICBmaWVsZCgicGhvdG9VcmwiLCByYXdQcm9maWxlLnBpY3R1cmUpLAogICAgICAgIGZpZWxkKCJlbWFpbCIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJ1c2VybmFtZSIsIHJhd1Byb2ZpbGUuZW1haWwpLAogICAgICAgIGZpZWxkKCJsb2NhbGUiLCByYXdQcm9maWxlLnpvbmVJbmZvKSkpCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"name\":\"debug - imported (1)\",\"description\":\"Display sharedState, transientState, and headers.\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKgogKiBEaXNwbGF5IHNoYXJlZFN0YXRlLCB0cmFuc2llbnRTdGF0ZSwgYW5kIGhlYWRlcnMuCiAqCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBhbmNob3IgPSAnYW5jaG9yLScuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgdmFyIGhhbGlnbiA9ICdsZWZ0JzsKICB2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBQYXJhbWV0ZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgIGdldFF1ZXJ5U3RyaW5nKCkpLmNvbmNhdCgiPGJyIikuY29uY2F0KAogICAgcmVxdWVzdFBhcmFtZXRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikuY29uY2F0KAogICAgIjxwPjxiPlJlcXVlc3QgSGVhZGVyczwvYj46PGJyLz4iKS5jb25jYXQoCiAgICAgIHJlcXVlc3RIZWFkZXJzLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpCiAgdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICAgImRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NhbGxiYWNrLWNvbXBvbmVudCcpKS5mb3JFYWNoKFxuIikuY29uY2F0KAogICAgImZ1bmN0aW9uIChlKSB7XG4iKS5jb25jYXQoCiAgICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgICAiICBjb25zb2xlLmxvZygnaGVyZSEnKTtcbiIpLmNvbmNhdCgKICAgICIgIGlmIChtZXNzYWdlLmZpcnN0Q2hpbGQgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVOYW1lID09ICcjdGV4dCcgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVWYWx1ZS50cmltKCkgPT0gJyIpLmNvbmNhdChhbmNob3IpLmNvbmNhdCgiJykge1xuIikuY29uY2F0KAogICAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgICAiICAgIG1lc3NhZ2UuYWxpZ24gPSBcIiIpLmNvbmNhdChoYWxpZ24pLmNvbmNhdCgiXCI7XG4iKS5jb25jYXQoCiAgICAiICAgIG1lc3NhZ2UuaW5uZXJIVE1MID0gJyIpLmNvbmNhdChtZXNzYWdlKS5jb25jYXQoIic7XG4iKS5jb25jYXQoCiAgICAiICB9XG4iKS5jb25jYXQoCiAgICAifSkiKQogIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKICApOwogIGlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjayhmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sIG1lc3NhZ2UpLAogICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkKICAgICkuYnVpbGQoKTsKICB9IGVsc2UgewogICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8oJ3RydWUnKS5idWlsZCgpOwogIH0KCiAgLyoKICAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICAqCiAgICogRXhhbXBsZToKICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICovCiAgZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbiAoYykgewogICAgICB2YXIgciA9IChNYXRoLnJhbmRvbSgpICogMTApIHwgMDsKICAgICAgdmFyIHYgPSByOwogICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGdldFF1ZXJ5U3RyaW5nKCkgewogIAogICAgcmVxdWVzdFBhcmFtZXRlcnMucHV0KCdhdXRoSW5kZXhUeXBlJywgWydzZXJ2aWNlJ10pOwogICAgcmVxdWVzdFBhcmFtZXRlcnMucHV0KCdhdXRoSW5kZXhWYWx1ZScsIFsnU2ltcGxlJ10pOwogICAgcmVxdWVzdFBhcmFtZXRlcnMucHV0KCd1c2VybmFtZScsIFtzaGFyZWRTdGF0ZS5nZXQoJ3VzZXJuYW1lJyldKTsKICAgIAogICAgdmFyIHF1ZXJ5ID0gJyc7CiAgICB2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMocmVxdWVzdFBhcmFtZXRlcnMpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoIDsgaSsrKSB7CiAgICAgIHZhciBwYXJhbSA9IHBhcmFtc1tpXTsKICAgICAgdmFyIHZhbHVlcyA9IHJlcXVlc3RQYXJhbWV0ZXJzLmdldChwYXJhbSk7CiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsdWVzLmxlbmd0aCA7IGorKykgewogICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tqXTsKICAgICAgICBxdWVyeSA9IHF1ZXJ5ICsgcGFyYW0gKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpICsgJyYnOwogICAgICB9OwogICAgfTsKICAgIHJldHVybiBxdWVyeS5zdWJzdHJpbmcoMCwgcXVlcnkubGVuZ3RoID4gMCA/IHF1ZXJ5Lmxlbmd0aCAtIDEgOiAwKTsKICB9Cn0pKCk7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"fa53dc0e-b558-49ab-bc5a-609c0b4d1286\",\"name\":\"Debug\",\"description\":\"null\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2sKKTsKCm91dGNvbWUgPSAidHJ1ZSI7Cgp3aXRoIChmcikgewogIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICB2YXIgc2VwZXJhdG9yQ0IgPSBuZXcgVGV4dE91dHB1dENhbGxiYWNrKFRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CiAgICB2YXIgc2hhcmVkU3RhdGVDQiA9IG5ldyBUZXh0T3V0cHV0Q2FsbGJhY2soVGV4dE91dHB1dENhbGxiYWNrLklORk9STUFUSU9OLCAic2hhcmVkU3RhdGU6ICIgKyBzaGFyZWRTdGF0ZS50b1N0cmluZygpKTsKICAgIHZhciB0cmFuc2llbnRTdGF0ZUNCID0gbmV3IFRleHRPdXRwdXRDYWxsYmFjayhUZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sICJ0cmFuc2llbnRTdGF0ZTogIiArIHRyYW5zaWVudFN0YXRlLnRvU3RyaW5nKCkpOwogICAgdmFyIHJlcXVlc3RIZWFkZXJzQ0IgPSBuZXcgVGV4dE91dHB1dENhbGxiYWNrKFRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwgInJlcXVlc3RIZWFkZXJzOiAiICsgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSk7CiAgICB2YXIgdGhlQ2FsbGJhY2tzID0gW3NoYXJlZFN0YXRlQ0IsIHNlcGVyYXRvckNCLCB0cmFuc2llbnRTdGF0ZUNCLCBzZXBlcmF0b3JDQiwgcmVxdWVzdEhlYWRlcnNDQl07CiAgICBhY3Rpb24gPSBBY3Rpb24uc2VuZCh0aGVDYWxsYmFja3MpLmJ1aWxkKCk7CiAgfSBlbHNlIHsKICAgIGFjdGlvbiA9IEFjdGlvbi5nb1RvKCJ0cnVlIikuYnVpbGQoKTsKICB9Cn0K\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"1244e639-4a31-401d-ab61-d75133d8dc9e\",\"name\":\"Instagram Profile Normalization\",\"description\":\"Normalizes raw profile data from Instagram\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLmZpZWxkCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uCmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3QKCnJldHVybiBqc29uKG9iamVjdCgKICAgICAgICBmaWVsZCgiaWQiLCByYXdQcm9maWxlLmlkKSwKICAgICAgICBmaWVsZCgidXNlcm5hbWUiLCByYXdQcm9maWxlLnVzZXJuYW1lKSkpCg==\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c4f22465-2368-4e27-8013-e6399974fd48\",\"name\":\"SAML2 IDP Attribute Mapper Script\",\"description\":\"Default global script for SAML2 IDP Attribute Mapper\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjEtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCByZXR1cm5zIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSBvYmplY3RzIGZvciB0aGUgSURQIGZyYW1ld29yayB0byBpbnNlcnQgaW50byB0aGUgZ2VuZXJhdGVkIEFzc2VydGlvbi4KICoKICogRGVmaW5lZCB2YXJpYWJsZXM6CiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoMSkKICogICAgICAgICAgIFRoZSBzaW5nbGUgc2lnbi1vbiBzZXNzaW9uLgogKiBob3N0ZWRFbnRpdHlJZCAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgICAgICBUaGUgaG9zdGVkIGVudGl0eSBJRC4KICogcmVtb3RlRW50aXR5SWQgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICAgICAgVGhlIHJlbW90ZSBlbnRpdHkgSUQuCiAqIHJlYWxtIC0gU3RyaW5nIChwcmltaXRpdmUpLgogKiAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGluZyB0by4KICogbG9nZ2VyIC0gQWx3YXlzIHByZXNlbnQsIHRoZSBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgbG9nIGZpbGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aDogc2NyaXB0cy5TQU1MMl9JRFBfQVRUUklCVVRFX01BUFBFUgogKiBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgLSBJZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIgKDIpCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFuIElkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlciBpbnN0YW5jZSBjb250YWluaW5nIG1ldGhvZHMgdXNlZCBmb3IgSURQIGF0dHJpYnV0ZSBtYXBwaW5nLgogKgogKiBUaHJvd3MgU0FNTDJFeGNlcHRpb246CiAqICAgICAgLSBvbiBmYWlsaW5nIHRvIG1hcCB0aGUgSURQIGF0dHJpYnV0ZXMuCiAqCiAqIFJldHVybiAtIGEgbGlzdCBvZiBTQU1MIEF0dHJpYnV0ZSAoMykgb2JqZWN0cy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgU1NPVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9pcGxhbmV0L3Nzby9TU09Ub2tlbi5odG1sLgogKiAoMikgSWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcuMi9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvc2FtbDIvcGx1Z2lucy9zY3JpcHRlZC9JZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaHRtbC4KICogKDMpIEF0dHJpYnV0ZSAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL3N1bi9pZGVudGl0eS9zYW1sMi9hc3NlcnRpb24vQXR0cmlidXRlLmh0bWwuCiAqLwoKLyoqCiAqIERlZmF1bHQgU0FNTDIgSURQIEF0dHJpYnV0ZSBNYXBwZXIuCiAqLwpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKCkgewogICAgdmFyIGZySmF2YSA9IEphdmFJbXBvcnRlcigKICAgICAgICBjb20uc3VuLmlkZW50aXR5LnNhbWwyLmNvbW1vbi5TQU1MMkV4Y2VwdGlvbgogICAgKTsKCiAgICBjb25zdCBkZWJ1Z01ldGhvZCA9ICJTY3JpcHRlZElEUEF0dHJpYnV0ZU1hcHBlci5nZXRBdHRyaWJ1dGVzOjogIjsKCiAgICB0cnkgewoKICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1Nlc3Npb25WYWxpZChzZXNzaW9uKSkgewogICAgICAgICAgICBsb2dnZXIuZXJyb3IoZGVidWdNZXRob2QgKyAiSW52YWxpZCBzZXNzaW9uLiIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHZhciBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0UmVtb3RlU1BDb25maWdBdHRyaWJ1dGVNYXAocmVhbG0sIHJlbW90ZUVudGl0eUlkKTsKICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJSZW1vdGUgU1AgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICBpZiAoY29uZmlnTWFwID09IG51bGwgfHwgY29uZmlnTWFwLmlzRW1wdHkoKSkgewogICAgICAgICAgICBjb25maWdNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0SG9zdGVkSURQQ29uZmlnQXR0cmlidXRlTWFwKHJlYWxtLCBob3N0ZWRFbnRpdHlJZCk7CiAgICAgICAgICAgIGlmIChjb25maWdNYXAgPT0gbnVsbCB8fCBjb25maWdNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJDb25maWd1cmF0aW9uIG1hcCBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKGRlYnVnTWV0aG9kICsgIkhvc3RlZCBJRFAgYXR0cmlidXRlIG1hcCA9IHt9IiwgY29uZmlnTWFwKTsKICAgICAgICB9CgogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKICAgICAgICB2YXIgc3RyaW5nVmFsdWVNYXAgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoKTsKICAgICAgICB2YXIgYmluYXJ5VmFsdWVNYXA7CiAgICAgICAgdmFyIGxvY2FsQXR0cmlidXRlOwoKICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVhZCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBkYXRhc3RvcmUgaWYgdGhlIGlnbm9yZWQgcHJvZmlsZSBpcyBlbmFibGVkIGluIHRoaXMgcmVhbG0uCiAgICAgICAgaWYgKCFpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuaXNJZ25vcmVkUHJvZmlsZShzZXNzaW9uLCByZWFsbSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIFJlc29sdmUgYXR0cmlidXRlcyB0byBiZSByZWFkIGZyb20gdGhlIGRhdGFzdG9yZS4KICAgICAgICAgICAgICAgIHZhciBzdHJpbmdBdHRyaWJ1dGVzID0gbmV3IGphdmEudXRpbC5IYXNoU2V0KCk7CiAgICAgICAgICAgICAgICB2YXIgYmluYXJ5QXR0cmlidXRlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgIHdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlJdGVyLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBsb2NhbEF0dHJpYnV0ZSA9IGNvbmZpZ01hcC5nZXQoa2V5KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc1N0YXRpY0F0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5pc0JpbmFyeUF0dHJpYnV0ZShsb2NhbEF0dHJpYnV0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHRyZWF0IGFzIGJlaW5nIGJpbmFyeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5QXR0cmlidXRlcy5hZGQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLnJlbW92ZUJpbmFyeUF0dHJpYnV0ZUZsYWcobG9jYWxBdHRyaWJ1dGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMuYWRkKGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXN0cmluZ0F0dHJpYnV0ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVNYXAgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIuZ2V0QXR0cmlidXRlcyhzZXNzaW9uLCBzdHJpbmdBdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghYmluYXJ5QXR0cmlidXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBiaW5hcnlWYWx1ZU1hcCA9IGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5nZXRCaW5hcnlBdHRyaWJ1dGVzKHNlc3Npb24sIGJpbmFyeUF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGRlYnVnTWV0aG9kICsgIkVycm9yIGFjY2Vzc2luZyB0aGUgZGF0YXN0b3JlLiAiICsgZXJyb3IpOwogICAgICAgICAgICAgICAgLy9jb250aW51ZSB0byBjaGVjayBpbiBzc290b2tlbi4KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIGtleUl0ZXIgPSBjb25maWdNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICB3aGlsZSAoa2V5SXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGtleSA9IGtleUl0ZXIubmV4dCgpCiAgICAgICAgICAgIHZhciBuYW1lRm9ybWF0ID0gbnVsbDsKICAgICAgICAgICAgdmFyIHNhbWxBdHRyaWJ1dGUgPSBrZXk7CiAgICAgICAgICAgIGxvY2FsQXR0cmlidXRlID0gY29uZmlnTWFwLmdldChrZXkpOwogICAgICAgICAgICAvLyBjaGVjayBpZiBzYW1sQXR0cmlidXRlIGhhcyBmb3JtYXQgbmFtZUZvcm1hdHxzYW1sQXR0cmlidXRlCiAgICAgICAgICAgIHZhciBzYW1sQXR0cmlidXRlcyA9IFN0cmluZyhuZXcgamF2YS5sYW5nLlN0cmluZyhzYW1sQXR0cmlidXRlKSk7CiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBzYW1sQXR0cmlidXRlcy5zcGxpdCgnfCcpOwoKICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICBuYW1lRm9ybWF0ID0gdG9rZW5zWzBdOwogICAgICAgICAgICAgICAgc2FtbEF0dHJpYnV0ZSA9IHRva2Vuc1sxXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVZhbHVlcyA9IG5ldyBqYXZhLnV0aWwuSGFzaFNldCgpOwogICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzU3RhdGljQXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgZmxhZyBiZWZvcmUgdXNpbmcgaXQgYXMgdGhlIHN0YXRpYyB2YWx1ZQogICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlU3RhdGljQXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoW2xvY2FsQXR0cmlidXRlXSk7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJBZGRpbmcgc3RhdGljIHZhbHVlIHt9IGZvciBhdHRyaWJ1dGUgbmFtZWQge30iLCBsb2NhbEF0dHJpYnV0ZSwgc2FtbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmlzQmluYXJ5QXR0cmlidXRlKGxvY2FsQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZmxhZyBhcyBub3QgdXNlZCBmb3IgbG9va3VwCiAgICAgICAgICAgICAgICAgICAgbG9jYWxBdHRyaWJ1dGUgPSBpZHBBdHRyaWJ1dGVNYXBwZXJTY3JpcHRIZWxwZXIucmVtb3ZlQmluYXJ5QXR0cmlidXRlRmxhZyhsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzID0gaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldEJpbmFyeUF0dHJpYnV0ZVZhbHVlcyhzYW1sQXR0cmlidXRlLCBsb2NhbEF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5VmFsdWVNYXApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWVNYXAgIT0gbnVsbCAmJiAhc3RyaW5nVmFsdWVNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcyA9IHN0cmluZ1ZhbHVlTWFwLmdldChsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoZGVidWdNZXRob2QgKyAie30gc3RyaW5nIHZhbHVlIG1hcCB3YXMgZW1wdHkgb3IgbnVsbC4iLCBsb2NhbEF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSB1c2VycyBzc29Ub2tlbgogICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlcyA9PSBudWxsIHx8IGF0dHJpYnV0ZVZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJVc2VyIHByb2ZpbGUgZG9lcyBub3QgaGF2ZSB2YWx1ZSBmb3Ige30sIGNoZWNraW5nIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgamF2YS51dGlsLkhhc2hTZXQoaWRwQXR0cmlidXRlTWFwcGVyU2NyaXB0SGVscGVyLmdldFByb3BlcnR5U2V0KHNlc3Npb24sIGxvY2FsQXR0cmlidXRlKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZXMgPT0gbnVsbCB8fCBhdHRyaWJ1dGVWYWx1ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBsb2dnZXIubWVzc2FnZShkZWJ1Z01ldGhvZCArICJ7fSBub3QgZm91bmQgaW4gdXNlciBwcm9maWxlIG9yIFNTT1Rva2VuLiIsIGxvY2FsQXR0cmlidXRlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuYWRkKGlkcEF0dHJpYnV0ZU1hcHBlclNjcmlwdEhlbHBlci5jcmVhdGVTQU1MQXR0cmlidXRlKHNhbWxBdHRyaWJ1dGUsIG5hbWVGb3JtYXQsIGF0dHJpYnV0ZVZhbHVlcykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKCiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGxvZ2dlci5lcnJvcihkZWJ1Z01ldGhvZCArICJFcnJvciBtYXBwaW5nIElEUCBhdHRyaWJ1dGVzLiAiICsgZXJyb3IpOwogICAgICAgIHRocm93IG5ldyBmckphdmEuU0FNTDJFeGNlcHRpb24oZXJyb3IpOwogICAgfQp9CgpnZXRBdHRyaWJ1dGVzKCk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_IDP_ATTRIBUTE_MAPPER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58d29080-4563-480b-89bb-1e7719776a21\",\"name\":\"Google Profile Normalization\",\"description\":\"Normalizes raw profile data from Google\",\"script\":\"IlwiLypcXG4gKiBDb3B5cmlnaHQgMjAyMCBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcXG4gKlxcbiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuXFxuICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdFxcbiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLlxcbiAqL1xcblxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5maWVsZFxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uXFxuaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdFxcblxcbnJldHVybiBqc29uKG9iamVjdChcXG4gICAgICAgIGZpZWxkKFxcXCJpZFxcXCIsIHJhd1Byb2ZpbGUuc3ViKSxcXG4gICAgICAgIGZpZWxkKFxcXCJkaXNwbGF5TmFtZVxcXCIsIHJhd1Byb2ZpbGUubmFtZSksXFxuICAgICAgICBmaWVsZChcXFwiZ2l2ZW5OYW1lXFxcIiwgcmF3UHJvZmlsZS5naXZlbl9uYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJmYW1pbHlOYW1lXFxcIiwgcmF3UHJvZmlsZS5mYW1pbHlfbmFtZSksXFxuICAgICAgICBmaWVsZChcXFwicGhvdG9VcmxcXFwiLCByYXdQcm9maWxlLnBpY3R1cmUpLFxcbiAgICAgICAgZmllbGQoXFxcImVtYWlsXFxcIiwgcmF3UHJvZmlsZS5lbWFpbCksXFxuICAgICAgICBmaWVsZChcXFwidXNlcm5hbWVcXFwiLCByYXdQcm9maWxlLmVtYWlsKSxcXG4gICAgICAgIGZpZWxkKFxcXCJsb2NhbGVcXFwiLCByYXdQcm9maWxlLmxvY2FsZSkpKVwiXG4i\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"4a171d3a-056b-4ab7-a19f-d7e93ddf7ae5\",\"name\":\"SAML2 NameID Mapper Script\",\"description\":\"Default global script for SAML2 NameID Mapper\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjQgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoKICogVGhpcyBpcyBhbiBleGFtcGxlIFNBTUwyIE5hbWVJRCBNYXBwZXIgc2NyaXB0LgogKiBUaGlzIHNjcmlwdCBzaG91bGQgcmV0dXJuIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgU0FNTDIgTmFtZUlEIGlkZW50aWZpZXIuCiAqIFRoZSBleGFtcGxlIHNjcmlwdCBkZWxlZ2F0ZXMgdG8gdGhlIGNvbmZpZ3VyZWQgamF2YSBwbHVnaW4gdmlhIHRoZSBuYW1lSURTY3JpcHRIZWxwZXIgYmluZGluZy4KICovCm5hbWVJRFNjcmlwdEhlbHBlci5nZXROYW1lSURWYWx1ZSgpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"SAML2_NAMEID_MAPPER\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"13e3f263-9cd3-4844-8d1c-040fd0dd02eb\",\"name\":\"Device Profile Match Template - Decision Node Script\",\"description\":\"Default global script template for Device Profile Match decision node script for Authentication Tree\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAtMjAyMiBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy4KICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFRoZSBmb2xsb3dpbmcgc2NyaXB0IGlzIGEgc2ltcGxpZmllZCB0ZW1wbGF0ZSBmb3IgdW5kZXJzdGFuZGluZwogKiB0aGUgYmFzaWNzIG9mIGRldmljZSBtYXRjaGluZy4gX1RoaXMgaXMgbm90IGZ1bmN0aW9uYWxseSBjb21wbGV0ZS5fCiAqIEZvciBhIGZ1bmN0aW9uYWxseSBjb21wbGV0ZSBzY3JpcHQgYXMgd2VsbCBhcyBhIGRldmVsb3BtZW50IHRvb2xraXQsCiAqIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JnZVJvY2svZm9yZ2Vyb2NrLWRldmljZS1tYXRjaC1zY3JpcHQuCiAqCiAqIEdsb2JhbCBub2RlIHZhcmlhYmxlcyBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHNjb3BlOgogKiAxLiBgc2hhcmVkU3RhdGVgIHByb3ZpZGVzIGFjY2VzcyB0byBpbmNvbWluZyByZXF1ZXN0CiAqIDIuIGBkZXZpY2VQcm9maWxlc0Rhb2AgcHJvdmlkZXMgYWNjZXNzIHRvIHN0b3JlZCBwcm9maWxlcwogKiAzLiBgb3V0Y29tZWAgdmFyaWFibGUgbWFwcyB0byBhdXRoIHRyZWUgbm9kZSBvdXRjb21lczsgdmFsdWVzIGFyZQogKiAgICAndHJ1ZScsICdmYWxzZScsIG9yICd1bmtub3duRGV2aWNlJyAobm90aWNlIF9hbGxfIGFyZSBzdHJpbmdzKS4KICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgcmVxdWVzdCdzIGRldmljZSBwcm9maWxlLgogKiBSZXR1cm5zIHNlcmlhbGl6ZWQgSlNPTiAodHlwZSBzdHJpbmcpOyBwYXJzaW5nIHRoaXMgd2lsbCByZXN1bHQgYQogKiBuYXRpdmUgSlMgb2JqZWN0LgogKi8KdmFyIGluY29taW5nSnNvbiA9IHNoYXJlZFN0YXRlLmdldCgnZm9yZ2VSb2NrLmRldmljZS5wcm9maWxlJykudG9TdHJpbmcoKTsKdmFyIGluY29taW5nID0gSlNPTi5wYXJzZShpbmNvbWluZ0pzb24pOwoKLyoqCiAqIEdldCB0aGUgaW5jb21pbmcgdXNlcidzIHVzZXJuYW1lIGFuZCByZWFsbS4KICogTm90aWNlIHRoZSB1c2Ugb2YgYC5hc1N0cmluZygpYC4KICovCnZhciB1c2VybmFtZSA9IHNoYXJlZFN0YXRlLmdldCgidXNlcm5hbWUiKS5hc1N0cmluZygpOwp2YXIgcmVhbG0gPSBzaGFyZWRTdGF0ZS5nZXQoInJlYWxtIikuYXNTdHJpbmcoKTsKCi8qKgogKiBHZXQgdGhlIHVzZXIncyBzdG9yZWQgcHJvZmlsZXMgZm9yIGFwcHJvcHJpYXRlIHJlYWxtLgogKiBSZXR1cm5zIGEgX3NwZWNpYWxfIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIHByb2ZpbGUgZGF0YQogKi8KdmFyIHN0b3JlZFByb2ZpbGVzID0gZGV2aWNlUHJvZmlsZXNEYW8uZ2V0RGV2aWNlUHJvZmlsZXModXNlcm5hbWUsIHJlYWxtKTsKCi8vIERlZmF1bHQgdG8gYG91dGNvbWVgIG9mICd1bmtub3duRGV2aWNlJwpvdXRjb21lID0gJ3Vua25vd25EZXZpY2UnOwoKaWYgKHN0b3JlZFByb2ZpbGVzKSB7CiAgICB2YXIgaSA9IDA7CiAgICAvLyBOT1RFOiBgLnNpemUoKWAgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBzdG9yZWQgcHJvZmlsZXMKICAgIHZhciBsZW4gPSBzdG9yZWRQcm9maWxlcy5zaXplKCk7CgogICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHN0b3JlZCBwcm9maWxlLgogICAgICAgICAqIFJldHVybnMgc2VyaWFsaXplZCBKU09OICh0eXBlIHN0cmluZyk7IHBhcnNpbmcgdGhpcyB3aWxsIHJlc3VsdAogICAgICAgICAqIGEgbmF0aXZlIEpTIG9iamVjdC4KICAgICAgICAgKi8KICAgICAgICB2YXIgc3RvcmVkSnNvbiA9IHN0b3JlZFByb2ZpbGVzLmdldChpKTsKICAgICAgICB2YXIgc3RvcmVkID0gSlNPTi5wYXJzZShzdG9yZWRKc29uKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmluZCBhIHN0b3JlZCBwcm9maWxlIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KICAgICAgICAgKi8KICAgICAgICBpZiAoaW5jb21pbmcuaWRlbnRpZmllciA9PT0gc3RvcmVkLmlkZW50aWZpZXIpIHsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBOb3cgdGhhdCB5b3UndmUgZm91bmQgdGhlIGFwcHJvcHJpYXRlIHByb2ZpbGUsIHlvdSB3aWxsIHBlcmZvcm0KICAgICAgICAgICAgICogdGhlIGxvZ2ljIGhlcmUgdG8gbWF0Y2ggdGhlIHZhbHVlcyBvZiB0aGUgYGluY29taW5nYCBwcm9maWxlCiAgICAgICAgICAgICAqIHdpdGggdGhhdCBvZiB0aGUgYHN0b3JlZGAgcHJvZmlsZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogVGhlIHJlc3VsdCBvZiB0aGUgbWF0Y2hpbmcgbG9naWMgaXMgYXNzaWduZWQgdG8gYG91dGNvbWVgLiBTaW5jZQogICAgICAgICAgICAgKiB3ZSBoYXZlIHByb2ZpbGVzIG9mIHRoZSBzYW1lIGlkZW50aWZpZXIsIHRoZSB2YWx1ZSAodHlwZSBzdHJpbmcpCiAgICAgICAgICAgICAqIHNob3VsZCBub3cgYmUgZWl0aGVyICd0cnVlJyBvciAnZmFsc2UnIChwcm9wZXJ0aWVzIG1hdGNoZWQgb3Igbm90KS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYywgdmlzaXQgdGhpcyBHaXRodWIgcmVwbzoKICAgICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL0ZvcmdlUm9jay9mb3JnZXJvY2stZGV2aWNlLW1hdGNoLXNjcmlwdAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb3V0Y29tZSA9ICdmYWxzZSc7CiAgICAgICAgfQogICAgfQp9Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"cadaa25c-8347-48b1-84e9-cf8c3314cac0\",\"name\":\"Bravo OIDC Claims Script - imported (1)\",\"description\":\"Default bravo realm script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"09d6f27b-3c7c-4bc0-a7ff-e19d93f6b6d9\",\"name\":\"Load Reference Selfie\",\"description\":\"Load reference selfie into shared state\",\"script\":\"LyogTG9hZCBSZWZlcmVuY2UgU2VsZmllCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIExvYWQgcmVmZXJlbmNlIHNlbGZpZSBpbnRvIHRyYW5zaWVudCBzdGF0ZQogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwooZnVuY3Rpb24gKCkgewogIG91dGNvbWUgPSAndHJ1ZSc7CgogIHZhciBzZWxmaWVBdHRyID0gJ2ZyLWF0dHItc3RyMSc7CiAgdmFyIGlkZW50aXR5ID0gaWRSZXBvc2l0b3J5LmdldElkZW50aXR5KG5vZGVTdGF0ZS5nZXQoJ19pZCcpKTsKICB2YXIgc2VsZmllID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlVmFsdWVzKHNlbGZpZUF0dHIpWzBdOwogIGlmIChzZWxmaWUpIHsKICAgIHNldFRyYW5zaWVudE9iamVjdEF0dHJpYnV0ZShzZWxmaWVBdHRyLCBzZWxmaWUpOwogIH0KCiAgLyoKICAgKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gc2V0VHJhbnNpZW50T2JqZWN0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7CiAgICB2YXIgYXR0cmlidXRlcyA9IG5vZGVTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgIGlmIChhdHRyaWJ1dGVzICYmIHZhbHVlKSB7CiAgICAgIGF0dHJpYnV0ZXMucHV0KG5hbWUsIHZhbHVlKTsKICAgICAgbm9kZVN0YXRlLnB1dFRyYW5zaWVudCgib2JqZWN0QXR0cmlidXRlcyIsIGF0dHJpYnV0ZXMpOwogICAgfSBlbHNlIGlmICh2YWx1ZSkgewogICAgICBub2RlU3RhdGUucHV0VHJhbnNpZW50KCJvYmplY3RBdHRyaWJ1dGVzIiwgeyBuYW1lOiB2YWx1ZSB9ICk7CiAgICB9CiAgfQp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"2.0\"},{\"_id\":\"d22f9a0c-426a-4466-b95e-d0f125b0d5fa\",\"name\":\"OAuth2 Access Token Modification Script\",\"description\":\"Default global script for OAuth2 Access Token Modification\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"3e31996b-4522-44a2-b360-0851cece3854\",\"name\":\"Bravo OIDC Claims Script\",\"description\":\"Default bravo realm script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"c735de08-f8f2-4e69-aa4a-2d8d3d438323\",\"name\":\"OAuth2 May Act Script\",\"description\":\"Default global script for OAuth2 May Act\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjAgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKLyoqCiAqIERlZmluZWQgdmFyaWFibGVzOgogKiB0b2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gdG8gYmUgdXBkYXRlZC4gTXV0YWJsZSBvYmplY3QsIGFsbCBjaGFuZ2VzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gd2lsbCBiZSByZWZsZWN0ZWQuCiAqIGxvZ2dlciAtIGFsd2F5cyBwcmVzZW50LCBjb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIHNjcmlwdE5hbWUgLSBhbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0CiAqIHNlc3Npb24gLSBwcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdAogKiByZXF1ZXN0UHJvcGVydGllcyAtIGFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIHRoZSByZXF1ZXN0IFVSSQogKiAgICAgICAgICAgICAgICAgICAgIHJlYWxtIC0gdGhlIHJlYWxtIHRoYXQgdGhlIHJlcXVlc3QgcmVsYXRlcyB0bwogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBhIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLiBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IKICogICAgICAgICAgICAgICAgICAgICBtb3JlIHByb3BlcnRpZXMuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QKICogICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMuCiAqIGNsaWVudFByb3BlcnRpZXMgLSBwcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICBjbGllbnRJZCAtIHRoZSBjbGllbnQncyBVcmkgZm9yIHRoZSByZXF1ZXN0IGxvY2FsZQogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBsaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBjbGllbnQKICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gbGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudAogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFNjb3BlcyAtIGxpc3Qgb2YgdGhlIGFsbG93ZWQgc2NvcGVzIGZvciB0aGUgY2xpZW50CiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzLCBlLmc6CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyB0ZXN0bWFwIC0+IEtleTEgLT4gVmFsdWUxCiAqCiAqIGlkZW50aXR5IC0gYWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIKICogc2NvcGVzIC0gYWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzCiAqLwovKgppbXBvcnQgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZQoKdG9rZW4uc2V0TWF5QWN0KAogICAgSnNvblZhbHVlLmpzb24oSnNvblZhbHVlLm9iamVjdCgKICAgICAgICBKc29uVmFsdWUuZmllbGQoImNsaWVudF9pZCIsICJteUNsaWVudCIpLCAKICAgICAgICBKc29uVmFsdWUuZmllbGQoInN1YiIsICIodXNyIW15QWN0b3IpIikpKSkKKi8K\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"OAUTH2_MAY_ACT\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"58c824ae-84ed-4724-82cd-db128fc3f6c\",\"name\":\"Normalized Profile to Managed User\",\"description\":\"Converts a normalized social profile into a managed user\",\"script\":\"IlwiLypcXG4gKiBDb3B5cmlnaHQgMjAyMCBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcXG4gKlxcbiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuXFxuICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdFxcbiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLlxcbiAqL1xcblxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5maWVsZFxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uXFxuaW1wb3J0IHN0YXRpYyBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlLm9iamVjdFxcblxcbmltcG9ydCBvcmcuZm9yZ2Vyb2NrLmpzb24uSnNvblZhbHVlXFxuXFxuSnNvblZhbHVlIG1hbmFnZWRVc2VyID0ganNvbihvYmplY3QoXFxuICAgICAgICBmaWVsZChcXFwiZ2l2ZW5OYW1lXFxcIiwgbm9ybWFsaXplZFByb2ZpbGUuZ2l2ZW5OYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJzblxcXCIsIG5vcm1hbGl6ZWRQcm9maWxlLmZhbWlseU5hbWUpLFxcbiAgICAgICAgZmllbGQoXFxcIm1haWxcXFwiLCBub3JtYWxpemVkUHJvZmlsZS5lbWFpbCksXFxuICAgICAgICBmaWVsZChcXFwidXNlck5hbWVcXFwiLCBub3JtYWxpemVkUHJvZmlsZS51c2VybmFtZSkpKVxcblxcbmlmIChub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxBZGRyZXNzLmlzTm90TnVsbCgpKSBtYW5hZ2VkVXNlci5wdXQoXFxcInBvc3RhbEFkZHJlc3NcXFwiLCBub3JtYWxpemVkUHJvZmlsZS5wb3N0YWxBZGRyZXNzKVxcbmlmIChub3JtYWxpemVkUHJvZmlsZS5hZGRyZXNzTG9jYWxpdHkuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dChcXFwiY2l0eVxcXCIsIG5vcm1hbGl6ZWRQcm9maWxlLmFkZHJlc3NMb2NhbGl0eSlcXG5pZiAobm9ybWFsaXplZFByb2ZpbGUuYWRkcmVzc1JlZ2lvbi5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KFxcXCJzdGF0ZVByb3ZpbmNlXFxcIiwgbm9ybWFsaXplZFByb2ZpbGUuYWRkcmVzc1JlZ2lvbilcXG5pZiAobm9ybWFsaXplZFByb2ZpbGUucG9zdGFsQ29kZS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KFxcXCJwb3N0YWxDb2RlXFxcIiwgbm9ybWFsaXplZFByb2ZpbGUucG9zdGFsQ29kZSlcXG5pZiAobm9ybWFsaXplZFByb2ZpbGUuY291bnRyeS5pc05vdE51bGwoKSkgbWFuYWdlZFVzZXIucHV0KFxcXCJjb3VudHJ5XFxcIiwgbm9ybWFsaXplZFByb2ZpbGUuY291bnRyeSlcXG5pZiAobm9ybWFsaXplZFByb2ZpbGUucGhvbmUuaXNOb3ROdWxsKCkpIG1hbmFnZWRVc2VyLnB1dChcXFwidGVsZXBob25lTnVtYmVyXFxcIiwgbm9ybWFsaXplZFByb2ZpbGUucGhvbmUpXFxuXFxuLy8gaWYgdGhlIGdpdmVuTmFtZSBhbmQgZmFtaWx5TmFtZSBpcyBudWxsIG9yIGVtcHR5XFxuLy8gdGhlbiBhZGQgYSBib29sZWFuIGZsYWcgdG8gdGhlIHNoYXJlZCBzdGF0ZSB0byBpbmRpY2F0ZSBuYW1lcyBhcmUgbm90IHByZXNlbnRcXG4vLyB0aGlzIGNvdWxkIGJlIHVzZWQgZWxzZXdoZXJlXFxuLy8gZm9yIGVnLiB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gYSBzY3JpcHRlZCBkZWNpc2lvbiBub2RlIHRvIGJ5LXBhc3MgcGF0Y2hpbmdcXG4vLyB0aGUgdXNlciBvYmplY3Qgd2l0aCBibGFuayB2YWx1ZXMgd2hlbiBnaXZlbk5hbWUgIGFuZCBmYW1pbHlOYW1lIGlzIG5vdCBwcmVzZW50XFxuYm9vbGVhbiBub0dpdmVuTmFtZSA9IG5vcm1hbGl6ZWRQcm9maWxlLmdpdmVuTmFtZS5pc051bGwoKSB8fCAoIW5vcm1hbGl6ZWRQcm9maWxlLmdpdmVuTmFtZS5hc1N0cmluZygpPy50cmltKCkpXFxuYm9vbGVhbiBub0ZhbWlseU5hbWUgPSBub3JtYWxpemVkUHJvZmlsZS5mYW1pbHlOYW1lLmlzTnVsbCgpIHx8ICghbm9ybWFsaXplZFByb2ZpbGUuZmFtaWx5TmFtZS5hc1N0cmluZygpPy50cmltKCkpXFxuc2hhcmVkU3RhdGUucHV0KFxcXCJuYW1lRW1wdHlPck51bGxcXFwiLCBub0dpdmVuTmFtZSAmJiBub0ZhbWlseU5hbWUpXFxuXFxucmV0dXJuIG1hbmFnZWRVc2VyXFxuXCJcbiI=\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"703dab1a-1921-4981-98dd-b8e5349d8548\",\"name\":\"Device Id (Match) - Server Side\",\"description\":\"Default global script for server side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAyMyBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIFNjYWxhckNvbXBhcmF0b3IgPSB7fSwgU2NyZWVuQ29tcGFyYXRvciA9IHt9LCBNdWx0aVZhbHVlQ29tcGFyYXRvciA9IHt9LCBVc2VyQWdlbnRDb21wYXJhdG9yID0ge30sIEdlb2xvY2F0aW9uQ29tcGFyYXRvciA9IHt9OwoKdmFyIGNvbmZpZyA9IHsKICAgIHByb2ZpbGVFeHBpcmF0aW9uOiAzMCwgICAgICAgICAgICAgIC8vaW4gZGF5cwogICAgbWF4UHJvZmlsZXNBbGxvd2VkOiA1LAogICAgbWF4UGVuYWx0eVBvaW50czogMCwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBzY3JlZW46IHsKICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICAgIGNvbXBhcmF0b3I6IFNjcmVlbkNvbXBhcmF0b3IsCiAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDUwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHBsdWdpbnM6IHsKICAgICAgICAgICAgaW5zdGFsbGVkUGx1Z2luczogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb250czogewogICAgICAgICAgICBpbnN0YWxsZWRGb250czogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogTXVsdGlWYWx1ZUNvbXBhcmF0b3IsCiAgICAgICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICAgICAgbWF4UGVyY2VudGFnZURpZmZlcmVuY2U6IDEwLAogICAgICAgICAgICAgICAgICAgIG1heERpZmZlcmVuY2VzOiA1LAogICAgICAgICAgICAgICAgICAgIHBlbmFsdHlQb2ludHM6IDEwMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICB0aW1lem9uZTogewogICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgY29tcGFyYXRvcjogU2NhbGFyQ29tcGFyYXRvciwKICAgICAgICAgICAgICAgIGFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdXNlckFnZW50OiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgICBjb21wYXJhdG9yOiBVc2VyQWdlbnRDb21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBpZ25vcmVWZXJzaW9uOiB0cnVlLAogICAgICAgICAgICAgICAgcGVuYWx0eVBvaW50czogMTAwCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdlb2xvY2F0aW9uOiB7CiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICAgICAgY29tcGFyYXRvcjogR2VvbG9jYXRpb25Db21wYXJhdG9yLAogICAgICAgICAgICBhcmdzOiB7CiAgICAgICAgICAgICAgICBhbGxvd2VkUmFuZ2U6IDEwMCwgICAgICAgICAgICAvL2luIG1pbGVzCiAgICAgICAgICAgICAgICBwZW5hbHR5UG9pbnRzOiAxMDAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJhdG9yIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgp2YXIgYWxsLCBhbnksIGNhbGN1bGF0ZURpc3RhbmNlLCBjYWxjdWxhdGVJbnRlcnNlY3Rpb24sIGNhbGN1bGF0ZVBlcmNlbnRhZ2UsIG51bGxPclVuZGVmaW5lZCwgc3BsaXRBbmRUcmltLAogICAgdW5kZWZpbmVkTG9jYXRpb247CgovLyBDb21wYXJpc29uUmVzdWx0CgovKioKICogQ29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gcGVuYWx0eSBwb2ludHMuCiAqCiAqIEBwYXJhbSBwZW5hbHR5UG9pbnRzIChOdW1iZXIpIFRoZSBwZW5hbHR5IHBvaW50cyBmb3IgdGhlIGNvbXBhcmlzb24gKGRlZmF1bHRzIHRvIDApLgogKiBAcGFyYW0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSAoYm9vbGVhbikgV2hldGhlciB0aGUgY3VycmVudCB2YWx1ZSBjb250YWlucyBtb3JlIGluZm9ybWF0aW9uCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBzdG9yZWQgdmFsdWUgKGRlZmF1bHRzIHRvIGZhbHNlKS4KICovCmZ1bmN0aW9uIENvbXBhcmlzb25SZXN1bHQoKSB7CgogICAgdmFyIHBlbmFsdHlQb2ludHMgPSAwLAogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBmYWxzZTsKCiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPSBhcmd1bWVudHNbMV07CiAgICB9CgogICAgaWYgKGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkICYmIGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKHR5cGVvZihhcmd1bWVudHNbMF0pID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSA9IGFyZ3VtZW50c1swXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwZW5hbHR5UG9pbnRzID0gYXJndW1lbnRzWzBdOwogICAgICAgIH0KICAgIH0KCiAgICB0aGlzLnBlbmFsdHlQb2ludHMgPSBwZW5hbHR5UG9pbnRzOwogICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZTsKCn0KCkNvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUyA9IG5ldyBDb21wYXJpc29uUmVzdWx0KDApOwoKLyoqCiAqIFN0YXRpYyBtZXRob2QgZm9yIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcuCiAqCiAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkuCiAqLwpDb21wYXJpc29uUmVzdWx0LmlzU3VjY2Vzc2Z1bCA9ICBmdW5jdGlvbihjb21wYXJpc29uUmVzdWx0KSB7CiAgICByZXR1cm4gY29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKTsKfTsKCgovKioKICogU3RhdGljIG1ldGhvZCBmb3IgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4KICoKICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gIGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHJldHVybiBjb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU7Cn07CgovKioKICogQ29tcGFyaXNvbiBmdW5jdGlvbiB0aGF0IGNhbiBiZSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0byBhcnJheS5zb3J0CiAqLwpDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUgPSBmdW5jdGlvbihmaXJzdCwgc2Vjb25kKSB7CiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGZpcnN0KSAmJiBudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoZmlyc3QpKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfSBlbHNlIGlmIChudWxsT3JVbmRlZmluZWQoc2Vjb25kKSkgewogICAgICAgIHJldHVybiAxOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoZmlyc3QucGVuYWx0eVBvaW50cyAhPT0gc2Vjb25kLnBlbmFsdHlQb2ludHMpIHsKICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnBlbmFsdHlQb2ludHMgLSBzZWNvbmQucGVuYWx0eVBvaW50czsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gKGZpcnN0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCkgLSAoc2Vjb25kLmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUgPyAxIDogMCk7CiAgICAgICAgfQogICAgfQp9OwoKLyoqCiAqIEFtYWxnYW1hdGVzIHRoZSBnaXZlbiBDb21wYXJpc29uUmVzdWx0IGludG8gdGhpcyBDb21wYXJpc29uUmVzdWx0LgogKgogKiBAcGFyYW0gY29tcGFyaXNvblJlc3VsdCBUaGUgQ29tcGFyaXNvblJlc3VsdCB0byBpbmNsdWRlLgogKi8KQ29tcGFyaXNvblJlc3VsdC5wcm90b3R5cGUuYWRkQ29tcGFyaXNvblJlc3VsdCA9IGZ1bmN0aW9uKGNvbXBhcmlzb25SZXN1bHQpIHsKICAgIHRoaXMucGVuYWx0eVBvaW50cyArPSBjb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHM7CiAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKSB7CiAgICAgICAgdGhpcy5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlID0gY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlOwogICAgfQp9OwoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBubyBwZW5hbHR5IHBvaW50cyBoYXZlIGJlZW4gYXNzaWduZWQgZm9yIHRoZSBjb21wYXJpc29uLgogKgogKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgY29tcGFyaXNvbiB3YXMgc3VjY2Vzc2Z1bC4KICovCkNvbXBhcmlzb25SZXN1bHQucHJvdG90eXBlLmlzU3VjY2Vzc2Z1bCA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZCh0aGlzLnBlbmFsdHlQb2ludHMpIHx8IHRoaXMucGVuYWx0eVBvaW50cyA9PT0gMDsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gc2ltcGxlIG9iamVjdHMgKFN0cmluZ3xOdW1iZXIpIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybwogKiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIGN1cnJlbnQgdmFsdWUuCiAqIEBwYXJhbSBzdG9yZWRWYWx1ZSAoU3RyaW5nfE51bWJlcikgVGhlIHN0b3JlZCB2YWx1ZS4KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0LgogKi8KU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlID0gZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUsIGNvbmZpZykgewogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlN0cmluZ0NvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOnN0b3JlZFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoc3RvcmVkVmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU3RyaW5nQ29tcGFyYXRvci5jb21wYXJlOmNvbmZpZzogIiArIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpOwogICAgfQogICAgaWYgKGNvbmZpZy5wZW5hbHR5UG9pbnRzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQuWkVST19QRU5BTFRZX1BPSU5UUzsKICAgIH0KCiAgICBpZiAoIW51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgfHwgY3VycmVudFZhbHVlICE9PSBzdG9yZWRWYWx1ZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoIW51bGxPclVuZGVmaW5lZChjdXJyZW50VmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KHRydWUpOwogICAgfQoKICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7Cn07CgovKioKICogQ29tcGFyZXMgdHdvIHNjcmVlbnMgYW5kIGlmIHRoZXkgYXJlIGVxdWFsIHRoZW4gcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB6ZXJvIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLAogKiBvdGhlcndpc2UgcmV0dXJucyBhIENvbXBhcmlzb25SZXN1bHQgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzIGFzc2lnbmVkLgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiB7CiAqICAgICAgICAgICAgInNjcmVlbldpZHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBoZWlnaHQuCiAqICAgICAgICAgICAgInNjcmVlbkNvbG91ckRlcHRoIjogKE51bWJlcikgVGhlIGN1cnJlbnQgY2xpZW50IHNjcmVlbiBjb2xvdXIgZGVwdGguCiAqICAgICAgICB9CiAqIEBwYXJhbSBzdG9yZWRWYWx1ZTogewogKiAgICAgICAgICAgICJzY3JlZW5XaWR0aCI6IChOdW1iZXIpIFRoZSBzdG9yZWQgY2xpZW50IHNjcmVlbiB3aWR0aC4KICogICAgICAgICAgICAic2NyZWVuSGVpZ2h0IjogKE51bWJlcikgVGhlIHN0b3JlZCBjbGllbnQgc2NyZWVuIGhlaWdodC4KICogICAgICAgICAgICAic2NyZWVuQ29sb3VyRGVwdGgiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGNsaWVudCBzY3JlZW4gY29sb3VyIGRlcHRoLgogKiAgICAgICAgfQogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgInBlbmFsdHlQb2ludHMiOiAoTnVtYmVyKSBUaGUgbnVtYmVyIG9mIHBlbmFsdHkgcG9pbnRzLgogKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovClNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTY3JlZW5Db21wYXJhdG9yLmNvbXBhcmU6Y3VycmVudFZhbHVlOiAiICsgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlNjcmVlbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICBjdXJyZW50VmFsdWUgPSB7c2NyZWVuV2lkdGg6IG51bGwsIHNjcmVlbkhlaWdodDogbnVsbCwgc2NyZWVuQ29sb3VyRGVwdGg6IG51bGx9OwogICAgfQogICAgaWYgKG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkpIHsKICAgICAgICBzdG9yZWRWYWx1ZSA9IHtzY3JlZW5XaWR0aDogbnVsbCwgc2NyZWVuSGVpZ2h0OiBudWxsLCBzY3JlZW5Db2xvdXJEZXB0aDogbnVsbH07CiAgICB9CgogICAgdmFyIGNvbXBhcmlzb25SZXN1bHRzID0gWwogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuV2lkdGgsIHN0b3JlZFZhbHVlLnNjcmVlbldpZHRoLCBjb25maWcpLAogICAgICAgIFNjYWxhckNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUuc2NyZWVuSGVpZ2h0LCBzdG9yZWRWYWx1ZS5zY3JlZW5IZWlnaHQsIGNvbmZpZyksCiAgICAgICAgU2NhbGFyQ29tcGFyYXRvci5jb21wYXJlKGN1cnJlbnRWYWx1ZS5zY3JlZW5Db2xvdXJEZXB0aCwgc3RvcmVkVmFsdWUuc2NyZWVuQ29sb3VyRGVwdGgsIGNvbmZpZyldOwoKICAgIGlmIChhbGwoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKSkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChhbnkoY29tcGFyaXNvblJlc3VsdHMsIENvbXBhcmlzb25SZXN1bHQuYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQoY29uZmlnLnBlbmFsdHlQb2ludHMpOwogICAgfQp9OwoKLyoqCiAqIFNwbGl0cyBib3RoIHZhbHVlcyB1c2luZyBkZWxpbWl0ZXIsIHRyaW1zIGV2ZXJ5IHZhbHVlIGFuZCBjb21wYXJlcyBjb2xsZWN0aW9ucyBvZiB2YWx1ZXMuCiAqIFJldHVybnMgemVyby1yZXN1bHQgZm9yIHNhbWUgbXVsdGktdmFsdWUgYXR0cmlidXRlcy4KICoKICogSWYgY29sbGVjdGlvbnMgYXJlIG5vdCBzYW1lIGNoZWNrcyBpZiBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaXMgbGVzcyBvciBlcXVhbCBtYXhEaWZmZXJlbmNlcyBvcgogKiBwZXJjZW50YWdlIG9mIGRpZmZlcmVuY2UgaXMgbGVzcyBvciBlcXVhbCBtYXhQZXJjZW50YWdlRGlmZmVyZW5jZS4KICoKICogSWYgeWVzIHRoZW4gcmV0dXJucyB6ZXJvLXJlc3VsdCB3aXRoIGFkZGl0aW9uYWwgaW5mbywgZWxzZSByZXR1cm5zIHBlbmFsdHlQb2ludHMtcmVzdWx0LgogKgogKiBAcGFyYW0gY3VycmVudFZhbHVlOiAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlOiAoU3RyaW5nKSBUaGUgc3RvcmVkIHZhbHVlLgogKiBAcGFyYW0gY29uZmlnOiB7CiAqICAgICAgICAgICAgIm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlIjogKE51bWJlcikgVGhlIG1heCBkaWZmZXJlbmNlIHBlcmNlbnRhZ2UgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgaXMgYXNzaWduZWQuCiAqICAgICAgICAgICAgIm1heERpZmZlcmVuY2VzIjogKE51bWJlcikgVGhlIG1heCBudW1iZXIgb2YgZGlmZmVyZW5jZXMgaW4gdGhlIHZhbHVlcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIHBlbmFsdHkgcG9pbnRzIGFyZSBhc3NpZ25lZC4KICogICAgICAgICAgICAicGVuYWx0eVBvaW50cyI6IChOdW1iZXIpIFRoZSBudW1iZXIgb2YgcGVuYWx0eSBwb2ludHMuCiAgKiAgICAgICAgfQogKiBAcmV0dXJuIENvbXBhcmlzb25SZXN1bHQKICovCk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiTXVsdGlWYWx1ZUNvbXBhcmF0b3IuY29tcGFyZTpzdG9yZWRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KHN0b3JlZFZhbHVlKSk7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIk11bHRpVmFsdWVDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgdmFyIGRlbGltaXRlciA9ICI7IiwKICAgICAgICBjdXJyZW50VmFsdWVzID0gc3BsaXRBbmRUcmltKGN1cnJlbnRWYWx1ZSwgZGVsaW1pdGVyKSwKICAgICAgICBzdG9yZWRWYWx1ZXMgPSBzcGxpdEFuZFRyaW0oc3RvcmVkVmFsdWUsIGRlbGltaXRlciksCiAgICAgICAgbWF4TnVtYmVyT2ZFbGVtZW50cyA9IE1hdGgubWF4KGN1cnJlbnRWYWx1ZXMubGVuZ3RoLCBzdG9yZWRWYWx1ZXMubGVuZ3RoKSwKICAgICAgICBudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9IGNhbGN1bGF0ZUludGVyc2VjdGlvbihjdXJyZW50VmFsdWVzLCBzdG9yZWRWYWx1ZXMpLmxlbmd0aCwKICAgICAgICBudW1iZXJPZkRpZmZlcmVuY2VzID0gbWF4TnVtYmVyT2ZFbGVtZW50cyAtIG51bWJlck9mVGhlU2FtZUVsZW1lbnRzLAogICAgICAgIHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzID0gY2FsY3VsYXRlUGVyY2VudGFnZShudW1iZXJPZkRpZmZlcmVuY2VzLCBtYXhOdW1iZXJPZkVsZW1lbnRzKTsKCiAgICBpZiAobnVsbE9yVW5kZWZpbmVkKHN0b3JlZFZhbHVlKSAmJiAhbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UobnVtYmVyT2ZUaGVTYW1lRWxlbWVudHMgKyAiIG9mICIgKyBtYXhOdW1iZXJPZkVsZW1lbnRzICsgIiBhcmUgc2FtZSIpOwogICAgfQoKICAgIGlmIChtYXhOdW1iZXJPZkVsZW1lbnRzID09PSAwKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBubyBhdHRyaWJ1dGVzIGZvdW5kIGluIGJvdGggcHJvZmlsZXMiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZlRoZVNhbWVFbGVtZW50cyA9PT0gbWF4TnVtYmVyT2ZFbGVtZW50cykgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJJZ25vcmVkIGJlY2F1c2UgYWxsIGF0dHJpYnV0ZXMgYXJlIHNhbWUiKTsKICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdC5aRVJPX1BFTkFMVFlfUE9JTlRTOwogICAgfQoKICAgIGlmIChudW1iZXJPZkRpZmZlcmVuY2VzID4gY29uZmlnLm1heERpZmZlcmVuY2VzKSB7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJXb3VsZCBiZSBpZ25vcmVkIGlmIG5vdCBtb3JlIHRoYW4gIiArIGNvbmZpZy5tYXhEaWZmZXJlbmNlcyArICIgZGlmZmVyZW5jZXMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KCiAgICBpZiAocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgPiBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UocGVyY2VudGFnZU9mRGlmZmVyZW5jZXMgKyAiIHBlcmNlbnRzIGFyZSBkaWZmZXJlbnQiKTsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIldvdWxkIGJlIGlnbm9yZWQgaWYgbm90IG1vcmUgdGhhbiAiICsgY29uZmlnLm1heFBlcmNlbnRhZ2VEaWZmZXJlbmNlICsgIiBwZXJjZW50Iik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdChjb25maWcucGVuYWx0eVBvaW50cyk7CiAgICB9CgogICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBudW1iZXIgb2YgZGlmZmVyZW5jZXMoIiArIG51bWJlck9mRGlmZmVyZW5jZXMgKyAiKSBub3QgbW9yZSB0aGFuICIKICAgICAgICAgICAgKyBjb25maWcubWF4RGlmZmVyZW5jZXMpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKHBlcmNlbnRhZ2VPZkRpZmZlcmVuY2VzICsgIiBwZXJjZW50cyBhcmUgZGlmZmVyZW50Iik7CiAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIklnbm9yZWQgYmVjYXVzZSBub3QgbW9yZSB0aGFuICIgKyBjb25maWcubWF4UGVyY2VudGFnZURpZmZlcmVuY2UgKyAiIHBlcmNlbnQiKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ29tcGFyaXNvblJlc3VsdCh0cnVlKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gVXNlciBBZ2VudCBTdHJpbmdzIGFuZCBpZiB0aGV5IGFyZSBlcXVhbCB0aGVuIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggemVybyBwZW5hbHR5CiAqIHBvaW50cyBhc3NpZ25lZCwgb3RoZXJ3aXNlIHJldHVybnMgYSBDb21wYXJpc29uUmVzdWx0IHdpdGggdGhlIGdpdmVuIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cyBhc3NpZ25lZC4KICoKICogQHBhcmFtIGN1cnJlbnRWYWx1ZSAoU3RyaW5nKSBUaGUgY3VycmVudCB2YWx1ZS4KICogQHBhcmFtIHN0b3JlZFZhbHVlIChTdHJpbmcpIFRoZSBzdG9yZWQgdmFsdWUuCiAqIEBwYXJhbSBjb25maWc6IHsKICogICAgICAgICAgICAiaWdub3JlVmVyc2lvbiI6IChib29sZWFuKSBJZiB0aGUgdmVyc2lvbiBudW1iZXJzIGluIHRoZSBVc2VyIEFnZW50IFN0cmluZ3Mgc2hvdWxkIGJlIGlnbm9yZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb21wYXJpc29uLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KICogICAgICAgIH0KICogQHJldHVybiBBIENvbXBhcmlzb25SZXN1bHQuCiAqLwpVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmUgPSBmdW5jdGlvbiAoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKSB7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiVXNlckFnZW50Q29tcGFyYXRvci5jb21wYXJlOmN1cnJlbnRWYWx1ZTogIiArIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJVc2VyQWdlbnRDb21wYXJhdG9yLmNvbXBhcmU6Y29uZmlnOiAiICsgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgICB9CgogICAgaWYgKGNvbmZpZy5pZ25vcmVWZXJzaW9uKSB7CiAgICAgICAgLy8gcmVtb3ZlIHZlcnNpb24gbnVtYmVyCiAgICAgICAgY3VycmVudFZhbHVlID0gbnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRWYWx1ZSkgPyBudWxsIDogY3VycmVudFZhbHVlLnJlcGxhY2UoL1tcZFwuXSsvZywgIiIpLnRyaW0oKTsKICAgICAgICBzdG9yZWRWYWx1ZSA9IG51bGxPclVuZGVmaW5lZChzdG9yZWRWYWx1ZSkgPyBudWxsIDogc3RvcmVkVmFsdWUucmVwbGFjZSgvW1xkXC5dKy9nLCAiIikudHJpbSgpOwogICAgfQoKICAgIHJldHVybiBTY2FsYXJDb21wYXJhdG9yLmNvbXBhcmUoY3VycmVudFZhbHVlLCBzdG9yZWRWYWx1ZSwgY29uZmlnKTsKfTsKCi8qKgogKiBDb21wYXJlcyB0d28gbG9jYXRpb25zLCB0YWtpbmcgaW50byBhY2NvdW50IGEgZGVncmVlIG9mIGRpZmZlcmVuY2UuCiAqCiAqIEBwYXJhbSBjdXJyZW50VmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgY3VycmVudCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGN1cnJlbnQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcGFyYW0gc3RvcmVkVmFsdWU6IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxhdGl0dWRlLgogKiAgICAgICAgICAgICJsb25naXR1ZGUiOiAoTnVtYmVyKSBUaGUgc3RvcmVkIGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIGNvbmZpZzogewogKiAgICAgICAgICAgICJhbGxvd2VkUmFuZ2UiOiAoTnVtYmVyKSBUaGUgbWF4IGRpZmZlcmVuY2UgYWxsb3dlZCBpbiB0aGUgdHdvIGxvY2F0aW9ucywgYmVmb3JlIHRoZSBwZW5hbHR5IGlzIGFzc2lnbmVkLgogKiAgICAgICAgICAgICJwZW5hbHR5UG9pbnRzIjogKE51bWJlcikgVGhlIG51bWJlciBvZiBwZW5hbHR5IHBvaW50cy4KKiAgICAgICAgIH0KICogQHJldHVybiBDb21wYXJpc29uUmVzdWx0CiAqLwpHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZSA9IGZ1bmN0aW9uIChjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBjb25maWcpIHsKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjdXJyZW50VmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKTsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiR2VvbG9jYXRpb25Db21wYXJhdG9yLmNvbXBhcmU6c3RvcmVkVmFsdWU6ICIgKyBKU09OLnN0cmluZ2lmeShzdG9yZWRWYWx1ZSkpOwogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJHZW9sb2NhdGlvbkNvbXBhcmF0b3IuY29tcGFyZTpjb25maWc6ICIgKyBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICAgIH0KCiAgICAvLyBDaGVjayBmb3IgdW5kZWZpbmVkIHN0b3JlZCBvciBjdXJyZW50IGxvY2F0aW9ucwoKICAgIGlmICh1bmRlZmluZWRMb2NhdGlvbihjdXJyZW50VmFsdWUpICYmIHVuZGVmaW5lZExvY2F0aW9uKHN0b3JlZFZhbHVlKSkgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CiAgICBpZiAodW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiAhdW5kZWZpbmVkTG9jYXRpb24oc3RvcmVkVmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KICAgIGlmICghdW5kZWZpbmVkTG9jYXRpb24oY3VycmVudFZhbHVlKSAmJiB1bmRlZmluZWRMb2NhdGlvbihzdG9yZWRWYWx1ZSkpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9CgogICAgLy8gQm90aCBsb2NhdGlvbnMgZGVmaW5lZCwgdGhlcmVmb3JlIHBlcmZvcm0gY29tcGFyaXNvbgoKICAgIHZhciBkaXN0YW5jZSA9IGNhbGN1bGF0ZURpc3RhbmNlKGN1cnJlbnRWYWx1ZSwgc3RvcmVkVmFsdWUpOwoKICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJEaXN0YW5jZSBiZXR3ZWVuICgiICsgY3VycmVudFZhbHVlLmxhdGl0dWRlICsgIiwiICsgY3VycmVudFZhbHVlLmxvbmdpdHVkZSArICIpIGFuZCAoIiArCiAgICAgICAgICAgIHN0b3JlZFZhbHVlLmxhdGl0dWRlICsgIiwiICsgc3RvcmVkVmFsdWUubG9uZ2l0dWRlICsgIikgaXMgIiArIGRpc3RhbmNlICsgIiBtaWxlcyIpOwogICAgfQoKICAgIGlmIChwYXJzZUZsb2F0KGRpc3RhbmNlLnRvUHJlY2lzaW9uKDUpKSA9PT0gMCkgewogICAgICAgIGxvZ2dlci5tZXNzYWdlKCJMb2NhdGlvbiBpcyB0aGUgc2FtZSIpOwogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LlpFUk9fUEVOQUxUWV9QT0lOVFM7CiAgICB9CgogICAgaWYgKGRpc3RhbmNlIDw9IGNvbmZpZy5hbGxvd2VkUmFuZ2UpIHsKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIlRvbGVyYXRlZCBiZWNhdXNlIGRpc3RhbmNlIG5vdCBtb3JlIHRoZW4gIiArIGNvbmZpZy5hbGxvd2VkUmFuZ2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb25SZXN1bHQodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChsb2dnZXIubWVzc2FnZUVuYWJsZWQoKSkgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiV291bGQgYmUgaWdub3JlZCBpZiBkaXN0YW5jZSBub3QgbW9yZSB0aGVuICIgKyBjb25maWcuYWxsb3dlZFJhbmdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBDb21wYXJpc29uUmVzdWx0KGNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgIH0KfTsKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi8vICAgICAgICAgICAgICAgICAgICBEZXZpY2UgUHJpbnQgTG9naWMgLSBETyBOT1QgTU9ESUZZICAgICAgICAgICAgICAgICAgICAgLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKLy8gVXRpbGl0eSBmdW5jdGlvbnMKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgZXZhbHVhdGluZyBmdW5jdGlvbiBmIG9uIGVhY2ggZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYWxsID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7Cn07CgovKioKICogUmV0dXJucyB0cnVlIGlmIGV2YWx1YXRpbmcgZnVuY3Rpb24gZiBvbiBhbnkgZWxlbWVudCBvZiB0aGUgQXJyYXkgYSByZXR1cm5zIHRydWUuCiAqCiAqIEBwYXJhbSBhOiAoQXJyYXkpIFRoZSBhcnJheSBvZiBlbGVtZW50cyB0byBldmFsdWF0ZQogKiBAcGFyYW0gZjogKEZ1bmN0aW9uKSBBIHNpbmdsZSBhcmd1bWVudCBmdW5jdGlvbiBmb3IgbWFwcGluZyBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gYm9vbGVhbi4KICogQHJldHVybiBib29sZWFuLgogKi8KYW55ID0gZnVuY3Rpb24oYSwgZikgewogICAgdmFyIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChmKGFbaV0pID09PSB0cnVlKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGxvY2F0aW9uIGlzIG51bGwgb3IgaGFzIHVuZGVmaW5lZCBsb25naXR1ZGUgb3IgbGF0aXR1ZGUgdmFsdWVzLgogKgogKiBAcGFyYW0gbG9jYXRpb246IHsKICogICAgICAgICAgICAibGF0aXR1ZGUiOiAoTnVtYmVyKSBUaGUgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBsb25naXR1ZGUuCiAqICAgICAgICB9CiAqIEByZXR1cm4gYm9vbGVhbgogKi8KdW5kZWZpbmVkTG9jYXRpb24gPSBmdW5jdGlvbihsb2NhdGlvbikgewogICAgcmV0dXJuIG51bGxPclVuZGVmaW5lZChsb2NhdGlvbikgfHwgbnVsbE9yVW5kZWZpbmVkKGxvY2F0aW9uLmxhdGl0dWRlKSB8fCBudWxsT3JVbmRlZmluZWQobG9jYXRpb24ubG9uZ2l0dWRlKTsKfTsKCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLgogKgogKiBAcGFyYW0gdmFsdWU6IGEgdmFsdWUgb2YgYW55IHR5cGUKICogQHJldHVybiBib29sZWFuCiAqLwpudWxsT3JVbmRlZmluZWQgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7Cn07CgovKioKICogQ2FsY3VsYXRlcyB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHR3byBsb2NhdGlvbnMuCiAqCiAqIEBwYXJhbSBmaXJzdDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBmaXJzdCBsYXRpdHVkZS4KICogICAgICAgICAgICAibG9uZ2l0dWRlIjogKE51bWJlcikgVGhlIGZpcnN0IGxvbmdpdHVkZS4KICogICAgICAgIH0KICogQHBhcmFtIHNlY29uZDogewogKiAgICAgICAgICAgICJsYXRpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbGF0aXR1ZGUuCiAqICAgICAgICAgICAgImxvbmdpdHVkZSI6IChOdW1iZXIpIFRoZSBzZWNvbmQgbG9uZ2l0dWRlLgogKiAgICAgICAgfQogKiBAcmV0dXJuIE51bWJlciBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdHdvIGxvY2F0aW9ucy4KICovCmNhbGN1bGF0ZURpc3RhbmNlID0gZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkgewogICAgdmFyIGZhY3RvciA9IChNYXRoLlBJIC8gMTgwKSwKICAgICAgICB0aGV0YSwKICAgICAgICBkaXN0OwogICAgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7CiAgICAgICAgcmV0dXJuIGRlZ3JlZXMgKiBmYWN0b3I7CiAgICB9CiAgICBmdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHsKICAgICAgICByZXR1cm4gcmFkaWFucyAvIGZhY3RvcjsKICAgIH0KICAgIHRoZXRhID0gZmlyc3QubG9uZ2l0dWRlIC0gc2Vjb25kLmxvbmdpdHVkZTsKICAgIGRpc3QgPSBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLnNpbihkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKyBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKGZpcnN0LmxhdGl0dWRlKSkgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHNlY29uZC5sYXRpdHVkZSkpCiAgICAgICAgKiBNYXRoLmNvcyhkZWdyZWVzVG9SYWRpYW5zKHRoZXRhKSk7CiAgICBkaXN0ID0gTWF0aC5hY29zKGRpc3QpOwogICAgZGlzdCA9IHJhZGlhbnNUb0RlZ3JlZXMoZGlzdCk7CiAgICBkaXN0ID0gZGlzdCAqIDYwICogMS4xNTE1OwogICAgcmV0dXJuIGRpc3Q7Cn07CgovKioKICogQ29udmVydHMgYSBTdHJpbmcgaG9sZGluZyBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW50byBhbiBhcnJheS4KICoKICogQHBhcmFtIHRleHQgKFN0cmluZykgVGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRlbGltaXRlZCBzZXF1ZW5jZSBvZiB2YWx1ZXMuCiAqIEBwYXJhbSBkZWxpbWl0ZXIgKFN0cmluZykgVGhlIGNoYXJhY3RlciBkZWxpbWl0aW5nIHZhbHVlcyB3aXRoaW4gdGhlIHRleHQgU3RyaW5nLgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCiAqLwpzcGxpdEFuZFRyaW0gPSBmdW5jdGlvbih0ZXh0LCBkZWxpbWl0ZXIpIHsKCiAgICB2YXIgcmVzdWx0cyA9IFtdLAogICAgICAgIGksCiAgICAgICAgdmFsdWVzLAogICAgICAgIHZhbHVlOwogICAgaWYgKHRleHQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KCiAgICB2YWx1ZXMgPSB0ZXh0LnNwbGl0KGRlbGltaXRlcik7CiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaV0udHJpbSgpOwogICAgICAgIGlmICh2YWx1ZSAhPT0gIiIpIHsKICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdHM7Cn07CgovKioKICogQ29udmVydHMgdmFsdWUgdG8gYSBwZXJjZW50YWdlIG9mIHJhbmdlLgogKgogKiBAcGFyYW0gdmFsdWUgKE51bWJlcikgVGhlIGFjdHVhbCBudW1iZXIgdG8gYmUgY29udmVydGVkIHRvIGEgcGVyY2VudGFnZS4KICogQHBhcmFtIHJhbmdlIChOdW1iZXIpIFRoZSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzIChpLmUuIHJlcHJlc2VudHMgMTAwJSkuCiAqIEByZXR1cm4gKE51bWJlcikgVGhlIHBlcmNlbnRhZ2UuCiAqLwpjYWxjdWxhdGVQZXJjZW50YWdlID0gZnVuY3Rpb24odmFsdWUsIHJhbmdlKSB7CiAgICBpZiAocmFuZ2UgPT09IDApIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBwYXJzZUZsb2F0KCh2YWx1ZSAvIHJhbmdlKS50b1ByZWNpc2lvbigyKSkgKiAxMDA7Cn07CgovKioKICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb250YWluaW5nIG9ubHkgdGhvc2UgZWxlbWVudHMgZm91bmQgaW4gYm90aCBhcnJheXMgcmVjZWl2ZWQgYXMgYXJndW1lbnRzLgogKgogKiBAcGFyYW0gZmlyc3QgKEFycmF5KSBUaGUgZmlyc3QgYXJyYXkuCiAqIEBwYXJhbSBzZWNvbmQgKEFycmF5KSBUaGUgc2Vjb25kIGFycmF5LgogKiBAcmV0dXJuIChBcnJheSkgVGhlIGVsZW1lbnRzIHRoYXQgZm91bmQgaW4gZmlyc3QgYW5kIHNlY29uZC4KICovCmNhbGN1bGF0ZUludGVyc2VjdGlvbiA9IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQpIHsKICAgIHJldHVybiBmaXJzdC5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgIHJldHVybiBzZWNvbmQuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7CiAgICB9KTsKfTsKCmZ1bmN0aW9uIGdldFZhbHVlKG9iaiwgYXR0cmlidXRlUGF0aCkgewogICAgdmFyIHZhbHVlID0gb2JqLAogICAgICAgIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlUGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICB2YWx1ZSA9IHZhbHVlW2F0dHJpYnV0ZVBhdGhbaV1dOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwp9CgoKZnVuY3Rpb24gaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWcpIHsKICAgIHJldHVybiBhdHRyaWJ1dGVDb25maWcuY29tcGFyYXRvciAhPT0gdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBnZXRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcsIGF0dHJpYnV0ZVBhdGgpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBbXSwKICAgICAgICBhdHRyaWJ1dGVOYW1lLAogICAgICAgIGF0dHJQYXRocywKICAgICAgICBhdHRyUGF0aCwKICAgICAgICBpOwoKICAgIGZvciAoYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVDb25maWcpIHsKICAgICAgICBpZiAoYXR0cmlidXRlQ29uZmlnLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7CgogICAgICAgICAgICBpZiAoaXNMZWFmTm9kZShhdHRyaWJ1dGVDb25maWdbYXR0cmlidXRlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBhdHRyUGF0aCA9IGF0dHJpYnV0ZVBhdGguc2xpY2UoKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRoLnB1c2goYXR0cmlidXRlTmFtZSk7CiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVQYXRocy5wdXNoKGF0dHJQYXRoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGF0dHJQYXRoID0gYXR0cmlidXRlUGF0aC5zbGljZSgpOwogICAgICAgICAgICAgICAgYXR0clBhdGgucHVzaChhdHRyaWJ1dGVOYW1lKTsKICAgICAgICAgICAgICAgIGF0dHJQYXRocyA9IGdldEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZ1thdHRyaWJ1dGVOYW1lXSwgYXR0clBhdGgpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGF0dHJQYXRocy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVBhdGhzLnB1c2goYXR0clBhdGhzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXR0cmlidXRlUGF0aHM7Cn0KCmZ1bmN0aW9uIGdldERldmljZVByaW50QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnKSB7CiAgICByZXR1cm4gZ2V0QXR0cmlidXRlUGF0aHMoYXR0cmlidXRlQ29uZmlnLCBbXSk7Cn0KCmZ1bmN0aW9uIGhhc1JlcXVpcmVkQXR0cmlidXRlcyhkZXZpY2VQcmludCwgYXR0cmlidXRlQ29uZmlnKSB7CgogICAgdmFyIGF0dHJpYnV0ZVBhdGhzID0gZ2V0RGV2aWNlUHJpbnRBdHRyaWJ1dGVQYXRocyhhdHRyaWJ1dGVDb25maWcpLAogICAgICAgIGksCiAgICAgICAgYXR0clZhbHVlLAogICAgICAgIGF0dHJDb25maWc7CgogICAgZm9yIChpID0gMDsgaSA8IGF0dHJpYnV0ZVBhdGhzLmxlbmd0aDsgaSsrKSB7CgogICAgICAgIGF0dHJWYWx1ZSA9IGdldFZhbHVlKGRldmljZVByaW50LCBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICBpZiAoYXR0ckNvbmZpZy5yZXF1aXJlZCAmJiBhdHRyVmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBsb2dnZXIud2FybmluZygiRGV2aWNlIFByaW50IHByb2ZpbGUgbWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGUsICIgKyBhdHRyaWJ1dGVQYXRoc1tpXSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZSBwcmludCBoYXMgcmVxdWlyZWQgYXR0cmlidXRlcyIpOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGF0dHJpYnV0ZUNvbmZpZywgZGV2aWNlUHJpbnQsIGRldmljZVByaW50UHJvZmlsZXMsIG1heFBlbmFsdHlQb2ludHMpIHsKCiAgICB2YXIgYXR0cmlidXRlUGF0aHMgPSBnZXREZXZpY2VQcmludEF0dHJpYnV0ZVBhdGhzKGF0dHJpYnV0ZUNvbmZpZyksCiAgICAgICAgZGFvID0gc2hhcmVkU3RhdGUuZ2V0KCdfRGV2aWNlSWREYW8nKSwKICAgICAgICByZXN1bHRzLAogICAgICAgIGosCiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQsCiAgICAgICAgaSwKICAgICAgICBjdXJyZW50VmFsdWUsCiAgICAgICAgc3RvcmVkVmFsdWUsCiAgICAgICAgYXR0ckNvbmZpZywKICAgICAgICBjb21wYXJpc29uUmVzdWx0LAogICAgICAgIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICBzZWxlY3RlZFByb2ZpbGUsCiAgICAgICAgY3VyRGV2aWNlUHJpbnRQcm9maWxlLAogICAgICAgIHZhbHM7CgogICAgcmVzdWx0cyA9IFtdOwogICAgZm9yIChqID0gMDsgaiA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBjdXJEZXZpY2VQcmludFByb2ZpbGUgPSBKU09OLnBhcnNlKG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvbihkZXZpY2VQcmludFByb2ZpbGVzW2pdKSk7CiAgICAgICAgYWdncmVnYXRlZENvbXBhcmlzb25SZXN1bHQgPSBuZXcgQ29tcGFyaXNvblJlc3VsdCgpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdHRyaWJ1dGVQYXRocy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY3VycmVudFZhbHVlID0gZ2V0VmFsdWUoZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgc3RvcmVkVmFsdWUgPSBnZXRWYWx1ZShjdXJEZXZpY2VQcmludFByb2ZpbGUuZGV2aWNlUHJpbnQsIGF0dHJpYnV0ZVBhdGhzW2ldKTsKICAgICAgICAgICAgYXR0ckNvbmZpZyA9IGdldFZhbHVlKGF0dHJpYnV0ZUNvbmZpZywgYXR0cmlidXRlUGF0aHNbaV0pOwoKICAgICAgICAgICAgaWYgKHN0b3JlZFZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb21wYXJpc29uUmVzdWx0ID0gbmV3IENvbXBhcmlzb25SZXN1bHQoYXR0ckNvbmZpZy5wZW5hbHR5UG9pbnRzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbXBhcmlzb25SZXN1bHQgPSBhdHRyQ29uZmlnLmNvbXBhcmF0b3IuY29tcGFyZShjdXJyZW50VmFsdWUsIHN0b3JlZFZhbHVlLCBhdHRyQ29uZmlnLmFyZ3MpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJDb21wYXJpbmcgYXR0cmlidXRlIHBhdGg6ICIgKyBhdHRyaWJ1dGVQYXRoc1tpXQogICAgICAgICAgICAgICAgICAgICsgIiwgQ29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIGNvbXBhcmlzb25SZXN1bHQuaXNTdWNjZXNzZnVsKCkgKyAiLCBwZW5hbHR5UG9pbnRzPSIKICAgICAgICAgICAgICAgICAgICArIGNvbXBhcmlzb25SZXN1bHQucGVuYWx0eVBvaW50cyArICIsIGFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWU9IgogICAgICAgICAgICAgICAgICAgICsgY29tcGFyaXNvblJlc3VsdC5hZGRpdGlvbmFsSW5mb0luQ3VycmVudFZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5hZGRDb21wYXJpc29uUmVzdWx0KGNvbXBhcmlzb25SZXN1bHQpOwogICAgICAgIH0KICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoIkFnZ3JlZ2F0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKSArICIsIHBlbmFsdHlQb2ludHM9IgogICAgICAgICAgICAgICAgKyBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICAgICArIGFnZ3JlZ2F0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmVzdWx0cy5wdXNoKHsKICAgICAgICAgICAga2V5OiBhZ2dyZWdhdGVkQ29tcGFyaXNvblJlc3VsdCwKICAgICAgICAgICAgdmFsdWU6IGRldmljZVByaW50UHJvZmlsZXNbal0KICAgICAgICB9KTsKICAgIH0KCiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXN1bHRzLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0LmNvbXBhcmUoYS5rZXksIGIua2V5KTsKICAgIH0pOwogICAgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0ID0gcmVzdWx0c1swXS5rZXk7CiAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICBsb2dnZXIubWVzc2FnZSgiU2VsZWN0ZWQgY29tcGFyaXNvbiByZXN1bHQ6IHN1Y2Nlc3NmdWw9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5pc1N1Y2Nlc3NmdWwoKQogICAgICAgICAgICArICIsIHBlbmFsdHlQb2ludHM9IiArIHNlbGVjdGVkQ29tcGFyaXNvblJlc3VsdC5wZW5hbHR5UG9pbnRzICsgIiwgYWRkaXRpb25hbEluZm9JbkN1cnJlbnRWYWx1ZT0iCiAgICAgICAgICAgICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LmFkZGl0aW9uYWxJbmZvSW5DdXJyZW50VmFsdWUpOwogICAgfQoKICAgIHNlbGVjdGVkUHJvZmlsZSA9IG51bGw7CiAgICBpZiAoc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgPD0gbWF4UGVuYWx0eVBvaW50cykgewogICAgICAgIHNlbGVjdGVkUHJvZmlsZSA9IHJlc3VsdHNbMF0udmFsdWU7CiAgICAgICAgaWYgKGxvZ2dlci5tZXNzYWdlRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJTZWxlY3RlZCBwcm9maWxlOiAiICsgc2VsZWN0ZWRQcm9maWxlICsKICAgICAgICAgICAgICAgICIgd2l0aCAiICsgc2VsZWN0ZWRDb21wYXJpc29uUmVzdWx0LnBlbmFsdHlQb2ludHMgKyAiIHBlbmFsdHkgcG9pbnRzIik7CiAgICAgICAgfQogICAgfQoKICAgIGlmIChzZWxlY3RlZFByb2ZpbGUgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyogdXBkYXRlIHByb2ZpbGUgKi8KICAgIHNlbGVjdGVkUHJvZmlsZS5wdXQoInNlbGVjdGlvbkNvdW50ZXIiLAogICAgICAgIGphdmEubGFuZy5JbnRlZ2VyLnZhbHVlT2YocGFyc2VJbnQoc2VsZWN0ZWRQcm9maWxlLmdldCgic2VsZWN0aW9uQ291bnRlciIpLCAxMCkgKyAxKSk7CiAgICBzZWxlY3RlZFByb2ZpbGUucHV0KCJsYXN0U2VsZWN0ZWREYXRlIiwgamF2YS5sYW5nLkxvbmcudmFsdWVPZihuZXcgRGF0ZSgpLmdldFRpbWUoKSkpOwogICAgc2VsZWN0ZWRQcm9maWxlLnB1dCgiZGV2aWNlUHJpbnQiLCBkZXZpY2VQcmludCk7CgogICAgdmFscyA9IFtdOwogICAgZm9yIChpID0gMDsgaSA8IGRldmljZVByaW50UHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWxzLnB1c2gob3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5qc29uKGRldmljZVByaW50UHJvZmlsZXNbaV0pKTsKICAgIH0KCiAgICBkYW8uc2F2ZURldmljZVByb2ZpbGVzKHVzZXJuYW1lLCByZWFsbSwgdmFscyk7CgogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIG1hdGNoRGV2aWNlUHJpbnQoKSB7CgogICAgaWYgKCF1c2VybmFtZSkgewogICAgICAgIGxvZ2dlci5lcnJvcigiVXNlcm5hbWUgbm90IHNldC4gQ2Fubm90IGNvbXBhcmUgdXNlcidzIGRldmljZSBwcmludCBwcm9maWxlcy4iKTsKICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICB9IGVsc2UgewoKICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImNsaWVudCBkZXZpY2VQcmludDogIiArIGNsaWVudFNjcmlwdE91dHB1dERhdGEpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGdldFByb2ZpbGVzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXhwaXJlZFByb2ZpbGUoZGV2aWNlUHJpbnRQcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cGlyYXRpb25EYXRlID0gbmV3IERhdGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNlbGVjdGVkRGF0ZTsKICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uRGF0ZS5zZXREYXRlKGV4cGlyYXRpb25EYXRlLmdldERhdGUoKSAtIGNvbmZpZy5wcm9maWxlRXhwaXJhdGlvbik7CgogICAgICAgICAgICAgICAgICAgIGxhc3RTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkZXZpY2VQcmludFByb2ZpbGUubGFzdFNlbGVjdGVkRGF0ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXN0U2VsZWN0ZWREYXRlIDwgZXhwaXJhdGlvbkRhdGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBkYW8gPSBzaGFyZWRTdGF0ZS5nZXQoJ19EZXZpY2VJZERhbycpLAogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVyOwoKICAgICAgICAgICAgICAgICAgICBwcm9maWxlcyA9IGRhby5nZXREZXZpY2VQcm9maWxlcyh1c2VybmFtZSwgcmVhbG0pOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvZmlsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXRlciA9IHByb2ZpbGVzLml0ZXJhdG9yKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgPSBpdGVyLm5leHQoKS5nZXRPYmplY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeHBpcmVkUHJvZmlsZShwcm9maWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChwcm9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLm1lc3NhZ2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoInN0b3JlZCBub24tZXhwaXJlZCBwcm9maWxlczogIiArIHJlc3VsdHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Tm90RXhwaXJlZFByb2ZpbGVzKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRldmljZVByaW50ID0gSlNPTi5wYXJzZShjbGllbnRTY3JpcHRPdXRwdXREYXRhKSwKICAgICAgICAgICAgZGV2aWNlUHJpbnRQcm9maWxlcyA9IGdldFByb2ZpbGVzKCk7CgogICAgICAgIGlmICghaGFzUmVxdWlyZWRBdHRyaWJ1dGVzKGRldmljZVByaW50LCBjb25maWcuYXR0cmlidXRlcykpIHsKICAgICAgICAgICAgbG9nZ2VyLm1lc3NhZ2UoImRldmljZVByaW50Lmhhc1JlcXVpcmVkQXR0cmlidXRlczogZmFsc2UiKTsKICAgICAgICAgICAgLy8gV2lsbCBmYWlsIHRoaXMgbW9kdWxlIGJ1dCBmYWxsLXRocm91Z2ggdG8gbmV4dCBtb2R1bGUuIFdoaWNoIHNob3VsZCBiZSBPVFAuCiAgICAgICAgICAgIGF1dGhTdGF0ZSA9IEZBSUxFRDsKICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVEZXZpY2VQcmludFByb2ZpbGVzKGNvbmZpZy5hdHRyaWJ1dGVzLCBkZXZpY2VQcmludCwgZGV2aWNlUHJpbnRQcm9maWxlcywgY29uZmlnLm1heFBlbmFsdHlQb2ludHMpKSB7CiAgICAgICAgICAgIGxvZ2dlci5tZXNzYWdlKCJkZXZpY2VQcmludC5oYXNWYWxpZFByb2ZpbGU6IHRydWUiKTsKICAgICAgICAgICAgYXV0aFN0YXRlID0gU1VDQ0VTUzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2dnZXIubWVzc2FnZSgiZGV2aWNlUHJpbnQuaGFzVmFsaWRQcm9maWxlOiBmYWxzZSIpOwogICAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ2RldmljZVByaW50UHJvZmlsZScsIEpTT04uc3RyaW5naWZ5KGRldmljZVByaW50KSk7CiAgICAgICAgICAgIC8vIFdpbGwgZmFpbCB0aGlzIG1vZHVsZSBidXQgZmFsbC10aHJvdWdoIHRvIG5leHQgbW9kdWxlLiBXaGljaCBzaG91bGQgYmUgT1RQLgogICAgICAgICAgICBhdXRoU3RhdGUgPSBGQUlMRUQ7CiAgICAgICAgfQogICAgfQp9CgptYXRjaERldmljZVByaW50KCk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_SERVER_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"4233c093-76a6-474b-ac38-5c0ea1de2484\",\"name\":\"Prepare Account Update\",\"description\":\"Move data from root of node state into objectAttributes for account update.\",\"script\":\"LyogUHJlcGFyZSBBY2NvdW50IFVwZGF0ZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBNb3ZlIGRhdGEgZnJvbSByb290IG9mIG5vZGUgc3RhdGUgaW50byBvYmplY3RBdHRyaWJ1dGVzIGZvciBhY2NvdW50IHVwZGF0ZS4KICogCiAqIFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgbWF5IG5vdCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICovCihmdW5jdGlvbiAoKSB7CiAgb3V0Y29tZSA9ICd0cnVlJzsKCiAgLyogQ29uZmlndXJlIHRvIGZpdCB5b3VyIGVudiAqLwogIHZhciBwMVVzZXJJZEFtQXR0ciA9ICdmci1hdHRyLWlzdHIxJzsgLy8gdGhpcyBpcyB3aGF0IHNob3VsZCBiZSBjb25maWd1cmVkIGluIHlvdXIgdmVyaWZ5IHByb29maW5nIG5vZGUKICB2YXIgcDFVc2VySWRJZG1BdHRyID0gJ2ZySW5kZXhlZFN0cmluZzEnOwogIHZhciBzZWxmaWVTb3VyY2UgPSAnc2VsZmllQmFzZTY0JzsKICB2YXIgc2VsZmllVGFyZ2V0ID0gJ2ZyVW5pbmRleGVkU3RyaW5nMSc7CiAgdmFyIGNyb3BwZWRQb3J0cmFpdFNvdXJjZSA9ICdjcm9wcGVkUG9ydHJhaXRCYXNlNjQnOwogIHZhciBjcm9wcGVkUG9ydHJhaXRUYXJnZXQgPSAnZnJVbmluZGV4ZWRTdHJpbmcyJzsKICB2YXIgbWV0YWRhdGFTb3VyY2UgPSAnVmVyaWZ5TWV0YWRhdGFSZXN1bHQnOwogIHZhciBtZXRhZGF0YVRhcmdldCA9ICdmclVuaW5kZXhlZFN0cmluZzMnOwogIHZhciB2ZXJpZnlTdGF0dXNBdHRyID0gJ2N1c3RvbV92ZXJpZnlTdGF0dXMnOwogIHZhciB2ZXJpZnlGYWlsZWRSZWFzb24gPSAnVmVyaWZlZEZhaWxlZFJlYXNvbic7CgogIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShwMVVzZXJJZElkbUF0dHIsIHNoYXJlZFN0YXRlLmdldChwMVVzZXJJZEFtQXR0cikpCiAgc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKHNlbGZpZVRhcmdldCwgc2hhcmVkU3RhdGUuZ2V0KHNlbGZpZVNvdXJjZSkpOwogIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShjcm9wcGVkUG9ydHJhaXRUYXJnZXQsIHNoYXJlZFN0YXRlLmdldChjcm9wcGVkUG9ydHJhaXRTb3VyY2UpKTsKICBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUobWV0YWRhdGFUYXJnZXQsIEpTT04uc3RyaW5naWZ5KHRyYW5zaWVudFN0YXRlLmdldChtZXRhZGF0YVNvdXJjZSkpKTsKICBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUodmVyaWZ5U3RhdHVzQXR0ciwgc2hhcmVkU3RhdGUuZ2V0KHZlcmlmeUZhaWxlZFJlYXNvbikgfHwgJ1N1Y2Nlc3NmdWxseSB2ZXJpZmllZCcpOwogICAgCiAgLy8gcmVtb3ZlIHNvdXJjZSB0byBtaW5pbWl6ZSBBdXRoSWQgc2l6ZQogIHNoYXJlZFN0YXRlLnB1dChzZWxmaWVTb3VyY2UsICcnKTsKICBzaGFyZWRTdGF0ZS5wdXQoY3JvcHBlZFBvcnRyYWl0U291cmNlLCAnJyk7CgogIC8qCiAgICogU3RvcmUgYXR0cmlidXRlcyBpbiBzaGFyZWQgc3RhdGUgZm9yIHVzZSB3aXRoIHRoZSBDcmVhdGUvUGF0Y2ggT2JqZWN0IG5vZGVzLgogICAqLwogIGZ1bmN0aW9uIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgewogICAgICAgdmFyIHN0b3JhZ2UgPSBzaGFyZWRTdGF0ZS5nZXQoJ29iamVjdEF0dHJpYnV0ZXMnKTsKICAgICAgaWYgKHN0b3JhZ2UgJiYgdmFsdWUpIHsKICAgICAgICAgIGlmIChzdG9yYWdlLnB1dCkgewogICAgICAgICAgICAgICAgc3RvcmFnZS5wdXQobmFtZSwgdmFsdWUpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgc3RvcmFnZVtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgaWYgKHZhbHVlKSB7CiAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ29iamVjdEF0dHJpYnV0ZXMnLCBKU09OLnBhcnNlKCd7IicrbmFtZSsnIjoiJyt2YWx1ZSsnIn0nKSk7CiAgICAgIH0KICB9Cn0oKSk7Cg==\",\"default\":false,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"36863ffb-40ec-48b9-94b1-9a99f71cc3b5\",\"name\":\"OIDC Claims Script\",\"description\":\"Default global script for OIDC claims\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMyBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"OIDC_CLAIMS\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"157298c0-7d31-4059-a95b-eeb08473b7e5\",\"name\":\"Device Id (Match) - Client Side\",\"description\":\"Default global script for client side Device Id (Match) Authentication Module\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMjMgRm9yZ2VSb2NrIEFTLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMuCiAqIG9yIHdpdGggb25lIG9mIGl0cyBhZmZpbGlhdGVzLiBBbGwgdXNlIHNoYWxsIGJlIGV4Y2x1c2l2ZWx5IHN1YmplY3QKICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGZvbnREZXRlY3RvciA9IChmdW5jdGlvbiAoKSB7CiAgICAvKioKICAgICAqIEphdmFTY3JpcHQgY29kZSB0byBkZXRlY3QgYXZhaWxhYmxlIGF2YWlsYWJpbGl0eSBvZiBhCiAgICAgKiBwYXJ0aWN1bGFyIGZvbnQgaW4gYSBicm93c2VyIHVzaW5nIEphdmFTY3JpcHQgYW5kIENTUy4KICAgICAqCiAgICAgKiBBdXRob3IgOiBMYWxpdCBQYXRlbAogICAgICogV2Vic2l0ZTogaHR0cDovL3d3dy5sYWxpdC5vcmcvbGFiL2phdmFzY3JpcHQtY3NzLWZvbnQtZGV0ZWN0LwogICAgICogTGljZW5zZTogQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wCiAgICAgKiAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAgICAqIFZlcnNpb246IDAuMTUgKDIxIFNlcCAyMDA5KQogICAgICogICAgICAgICAgQ2hhbmdlZCBjb21wYXJpc2lvbiBmb250IHRvIGRlZmF1bHQgZnJvbSBzYW5zLWRlZmF1bHQtZGVmYXVsdCwKICAgICAqICAgICAgICAgIGFzIGluIEZGMy4wIGZvbnQgb2YgY2hpbGQgZWxlbWVudCBkaWRuJ3QgZmFsbGJhY2sKICAgICAqICAgICAgICAgIHRvIHBhcmVudCBlbGVtZW50IGlmIHRoZSBmb250IGlzIG1pc3NpbmcuCiAgICAgKiBWZXJzaW9uOiAwLjIgKDA0IE1hciAyMDEyKQogICAgICogICAgICAgICAgQ29tcGFyaW5nIGZvbnQgYWdhaW5zdCBhbGwgdGhlIDMgZ2VuZXJpYyBmb250IGZhbWlsaWVzIGllLAogICAgICogICAgICAgICAgJ21vbm9zcGFjZScsICdzYW5zLXNlcmlmJyBhbmQgJ3NhbnMnLiBJZiBpdCBkb2Vzbid0IG1hdGNoIGFsbCAzCiAgICAgKiAgICAgICAgICB0aGVuIHRoYXQgZm9udCBpcyAxMDAlIG5vdCBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbQogICAgICogVmVyc2lvbjogMC4zICgyNCBNYXIgMjAxMikKICAgICAqICAgICAgICAgIFJlcGxhY2VkIHNhbnMgd2l0aCBzZXJpZiBpbiB0aGUgbGlzdCBvZiBiYXNlRm9udHMKICAgICAqLwogICAgLyoKICAgICAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMgRm9yZ2VSb2NrIEFTLgogICAgICovCiAgICB2YXIgZGV0ZWN0b3IgPSB7fSwgYmFzZUZvbnRzLCB0ZXN0U3RyaW5nLCB0ZXN0U2l6ZSwgaCwgcywgZGVmYXVsdFdpZHRoID0ge30sIGRlZmF1bHRIZWlnaHQgPSB7fSwgaW5kZXg7CgogICAgLy8gYSBmb250IHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCBhbGwgdGhlIHRocmVlIGRlZmF1bHQgZm9udHMuCiAgICAvLyBhbmQgaWYgaXQgZG9lc24ndCBtYXRjaCBhbGwgMyB0aGVuIHRoYXQgZm9udCBpcyBub3QgYXZhaWxhYmxlLgogICAgYmFzZUZvbnRzID0gWydtb25vc3BhY2UnLCAnc2Fucy1zZXJpZicsICdzZXJpZiddOwoKICAgIC8vd2UgdXNlIG0gb3IgdyBiZWNhdXNlIHRoZXNlIHR3byBjaGFyYWN0ZXJzIHRha2UgdXAgdGhlIG1heGltdW0gd2lkdGguCiAgICAvLyBBbmQgd2UgdXNlIGEgTExpIHNvIHRoYXQgdGhlIHNhbWUgbWF0Y2hpbmcgZm9udHMgY2FuIGdldCBzZXBhcmF0ZWQKICAgIHRlc3RTdHJpbmcgPSAibW1tbW1tbW1tbWxsaSI7CgogICAgLy93ZSB0ZXN0IHVzaW5nIDcycHggZm9udCBzaXplLCB3ZSBtYXkgdXNlIGFueSBzaXplLiBJIGd1ZXNzIGxhcmdlciB0aGUgYmV0dGVyLgogICAgdGVzdFNpemUgPSAnNzJweCc7CgogICAgaCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CgogICAgLy8gY3JlYXRlIGEgU1BBTiBpbiB0aGUgZG9jdW1lbnQgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgdGV4dCB3ZSB1c2UgdG8gdGVzdAogICAgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgIHMuc3R5bGUuZm9udFNpemUgPSB0ZXN0U2l6ZTsKICAgIHMuaW5uZXJIVE1MID0gdGVzdFN0cmluZzsKICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHQgd2lkdGggZm9yIHRoZSB0aHJlZSBiYXNlIGZvbnRzCiAgICAgICAgcy5zdHlsZS5mb250RmFtaWx5ID0gYmFzZUZvbnRzW2luZGV4XTsKICAgICAgICBoLmFwcGVuZENoaWxkKHMpOwogICAgICAgIGRlZmF1bHRXaWR0aFtiYXNlRm9udHNbaW5kZXhdXSA9IHMub2Zmc2V0V2lkdGg7IC8vd2lkdGggZm9yIHRoZSBkZWZhdWx0IGZvbnQKICAgICAgICBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dID0gcy5vZmZzZXRIZWlnaHQ7IC8vaGVpZ2h0IGZvciB0aGUgZGVmdWFsdCBmb250CiAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgIH0KCiAgICBkZXRlY3Rvci5kZXRlY3QgPSBmdW5jdGlvbihmb250KSB7CiAgICAgICAgdmFyIGRldGVjdGVkID0gZmFsc2UsIGluZGV4LCBtYXRjaGVkOwogICAgICAgIGZvciAoaW5kZXggaW4gYmFzZUZvbnRzKSB7CiAgICAgICAgICAgIHMuc3R5bGUuZm9udEZhbWlseSA9IGZvbnQgKyAnLCcgKyBiYXNlRm9udHNbaW5kZXhdOyAvLyBuYW1lIG9mIHRoZSBmb250IGFsb25nIHdpdGggdGhlIGJhc2UgZm9udCBmb3IgZmFsbGJhY2suCiAgICAgICAgICAgIGguYXBwZW5kQ2hpbGQocyk7CiAgICAgICAgICAgIG1hdGNoZWQgPSAocy5vZmZzZXRXaWR0aCAhPT0gZGVmYXVsdFdpZHRoW2Jhc2VGb250c1tpbmRleF1dIHx8IHMub2Zmc2V0SGVpZ2h0ICE9PSBkZWZhdWx0SGVpZ2h0W2Jhc2VGb250c1tpbmRleF1dKTsKICAgICAgICAgICAgaC5yZW1vdmVDaGlsZChzKTsKICAgICAgICAgICAgZGV0ZWN0ZWQgPSBkZXRlY3RlZCB8fCBtYXRjaGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgICB9OwoKICAgIHJldHVybiBkZXRlY3RvcjsKfSgpKTsKLyoKICogRE8gTk9UIEFMVEVSIE9SIFJFTU9WRSBDT1BZUklHSFQgTk9USUNFUyBPUiBUSElTIEhFQURFUi4KICoKICogQ29weXJpZ2h0IChjKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCiAqCiAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlCiAqICh0aGUgTGljZW5zZSkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCiAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICoKICogWW91IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHBzOi8vb3BlbnNzby5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwgb3IKICogb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQKICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCiAqIHBlcm1pc3Npb24gYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBXaGVuIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUsIGluY2x1ZGUgdGhpcyBDRERMCiAqIEhlYWRlciBOb3RpY2UgaW4gZWFjaCBmaWxlIGFuZCBpbmNsdWRlIHRoZSBMaWNlbnNlIGZpbGUKICogYXQgb3BlbnNzby9sZWdhbC9DRERMdjEuMC50eHQuCiAqIElmIGFwcGxpY2FibGUsIGFkZCB0aGUgZm9sbG93aW5nIGJlbG93IHRoZSBDRERMIEhlYWRlciwKICogd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFtdIHJlcGxhY2VkIGJ5CiAqIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uOgogKiAiUG9ydGlvbnMgQ29weXJpZ2h0ZWQgW3llYXJdIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0iCiAqCiAqLwovKgogKiBQb3J0aW9ucyBDb3B5cmlnaHRlZCAyMDEzIFN5bnRlZ3JpdHkuCiAqIFBvcnRpb25zIENvcHlyaWdodGVkIDIwMTMtMjAxNCBGb3JnZVJvY2sgQVMuCiAqLwoKdmFyIGNvbGxlY3RTY3JlZW5JbmZvID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzY3JlZW5JbmZvID0ge307CiAgICAgICAgaWYgKHNjcmVlbikgewogICAgICAgICAgICBpZiAoc2NyZWVuLndpZHRoKSB7CiAgICAgICAgICAgICAgICBzY3JlZW5JbmZvLnNjcmVlbldpZHRoID0gc2NyZWVuLndpZHRoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLmhlaWdodCkgewogICAgICAgICAgICAgICAgc2NyZWVuSW5mby5zY3JlZW5IZWlnaHQgPSBzY3JlZW4uaGVpZ2h0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2NyZWVuLnBpeGVsRGVwdGgpIHsKICAgICAgICAgICAgICAgIHNjcmVlbkluZm8uc2NyZWVuQ29sb3VyRGVwdGggPSBzY3JlZW4ucGl4ZWxEZXB0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3Qgc2NyZWVuIGluZm9ybWF0aW9uLiBzY3JlZW4gaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzY3JlZW5JbmZvOwogICAgfSwKICAgIGNvbGxlY3RUaW1lem9uZUluZm8gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHRpbWV6b25lSW5mbyA9ICB7fSwgb2Zmc2V0ID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOwoKICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgIHRpbWV6b25lSW5mby50aW1lem9uZSA9IG9mZnNldDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbm5vdCBjb2xsZWN0IHRpbWV6b25lIGluZm9ybWF0aW9uLiB0aW1lem9uZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aW1lem9uZUluZm87CiAgICB9LAogICAgY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgaWYgKG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IucGx1Z2lucykgewogICAgICAgICAgICB2YXIgcGx1Z2luc0luZm8gPSB7fSwgaSwgcGx1Z2lucyA9IG5hdmlnYXRvci5wbHVnaW5zOwogICAgICAgICAgICBwbHVnaW5zSW5mby5pbnN0YWxsZWRQbHVnaW5zID0gIiI7CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGx1Z2luc0luZm8uaW5zdGFsbGVkUGx1Z2lucyA9IHBsdWdpbnNJbmZvLmluc3RhbGxlZFBsdWdpbnMgKyBwbHVnaW5zW2ldLmZpbGVuYW1lICsgIjsiOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcGx1Z2luc0luZm87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBicm93c2VyIHBsdWdpbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLnBsdWdpbnMgaXMgbm90IGRlZmluZWQuIik7CiAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9CgogICAgfSwKLy8gR2V0dGluZyBnZW9sb2NhdGlvbiB0YWtlcyBzb21lIHRpbWUgYW5kIGlzIGRvbmUgYXN5bmNocm9ub3VzbHksIGhlbmNlIG5lZWQgYSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgb25jZSBnZW9sb2NhdGlvbiBpcyByZXRyaWV2ZWQuCiAgICBjb2xsZWN0R2VvbG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIGdlb2xvY2F0aW9uSW5mbyA9IHt9LAogICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgICAgICAgICAgZ2VvbG9jYXRpb25JbmZvLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7CiAgICAgICAgICAgICAgICBnZW9sb2NhdGlvbkluZm8ubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7CiAgICAgICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiQ2Fubm90IGNvbGxlY3QgZ2VvbG9jYXRpb24gaW5mb3JtYXRpb24uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgY2FsbGJhY2soZ2VvbG9jYXRpb25JbmZvKTsKICAgICAgICAgICAgfTsKICAgICAgICBpZiAobmF2aWdhdG9yICYmIG5hdmlnYXRvci5nZW9sb2NhdGlvbikgewogICAgICAgICAgICAvLyBOQjogSWYgdXNlciBjaG9vc2VzICdOb3Qgbm93JyBvbiBGaXJlZm94IG5laXRoZXIgY2FsbGJhY2sgZ2V0cyBjYWxsZWQKICAgICAgICAgICAgLy8gICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NTUzMwogICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJDYW5ub3QgY29sbGVjdCBnZW9sb2NhdGlvbiBpbmZvcm1hdGlvbi4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICAgICAgICBjYWxsYmFjayhnZW9sb2NhdGlvbkluZm8pOwogICAgICAgIH0KICAgIH0sCiAgICBjb2xsZWN0QnJvd3NlckZvbnRzSW5mbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZm9udHNJbmZvID0ge30sIGksIGZvbnRzTGlzdCA9IFsiY3Vyc2l2ZSIsIm1vbm9zcGFjZSIsInNlcmlmIiwic2Fucy1zZXJpZiIsImZhbnRhc3kiLCJkZWZhdWx0IiwiQXJpYWwiLCJBcmlhbCBCbGFjayIsCiAgICAgICAgICAgICJBcmlhbCBOYXJyb3ciLCJBcmlhbCBSb3VuZGVkIE1UIEJvbGQiLCJCb29rbWFuIE9sZCBTdHlsZSIsIkJyYWRsZXkgSGFuZCBJVEMiLCJDZW50dXJ5IiwiQ2VudHVyeSBHb3RoaWMiLAogICAgICAgICAgICAiQ29taWMgU2FucyBNUyIsIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkdlb3JnaWEiLCJHZW50aXVtIiwiSW1wYWN0IiwiS2luZyIsIkx1Y2lkYSBDb25zb2xlIiwiTGFsaXQiLAogICAgICAgICAgICAiTW9kZW5hIiwiTW9ub3R5cGUgQ29yc2l2YSIsIlBhcHlydXMiLCJUYWhvbWEiLCJUZVgiLCJUaW1lcyIsIlRpbWVzIE5ldyBSb21hbiIsIlRyZWJ1Y2hldCBNUyIsIlZlcmRhbmEiLAogICAgICAgICAgICAiVmVyb25hIl07CiAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gIiI7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBmb250c0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGZvbnREZXRlY3Rvci5kZXRlY3QoZm9udHNMaXN0W2ldKSkgewogICAgICAgICAgICAgICAgZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzID0gZm9udHNJbmZvLmluc3RhbGxlZEZvbnRzICsgZm9udHNMaXN0W2ldICsgIjsiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb250c0luZm87CiAgICB9LAogICAgZGV2aWNlUHJpbnQgPSB7fTsKCmRldmljZVByaW50LnNjcmVlbiA9IGNvbGxlY3RTY3JlZW5JbmZvKCk7CmRldmljZVByaW50LnRpbWV6b25lID0gY29sbGVjdFRpbWV6b25lSW5mbygpOwpkZXZpY2VQcmludC5wbHVnaW5zID0gY29sbGVjdEJyb3dzZXJQbHVnaW5zSW5mbygpOwpkZXZpY2VQcmludC5mb250cyA9IGNvbGxlY3RCcm93c2VyRm9udHNJbmZvKCk7CgppZiAobmF2aWdhdG9yLnVzZXJBZ2VudCkgewogICAgZGV2aWNlUHJpbnQudXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKfQppZiAobmF2aWdhdG9yLmFwcE5hbWUpIHsKICAgIGRldmljZVByaW50LmFwcE5hbWUgPSBuYXZpZ2F0b3IuYXBwTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcENvZGVOYW1lKSB7CiAgICBkZXZpY2VQcmludC5hcHBDb2RlTmFtZSA9IG5hdmlnYXRvci5hcHBDb2RlTmFtZTsKfQppZiAobmF2aWdhdG9yLmFwcFZlcnNpb24pIHsKICAgIGRldmljZVByaW50LmFwcFZlcnNpb24gPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbikgewogICAgZGV2aWNlUHJpbnQuYXBwTWlub3JWZXJzaW9uID0gbmF2aWdhdG9yLmFwcE1pbm9yVmVyc2lvbjsKfQppZiAobmF2aWdhdG9yLmJ1aWxkSUQpIHsKICAgIGRldmljZVByaW50LmJ1aWxkSUQgPSBuYXZpZ2F0b3IuYnVpbGRJRDsKfQppZiAobmF2aWdhdG9yLnBsYXRmb3JtKSB7CiAgICBkZXZpY2VQcmludC5wbGF0Zm9ybSA9IG5hdmlnYXRvci5wbGF0Zm9ybTsKfQppZiAobmF2aWdhdG9yLmNwdUNsYXNzKSB7CiAgICBkZXZpY2VQcmludC5jcHVDbGFzcyA9IG5hdmlnYXRvci5jcHVDbGFzczsKfQppZiAobmF2aWdhdG9yLm9zY3B1KSB7CiAgICBkZXZpY2VQcmludC5vc2NwdSA9IG5hdmlnYXRvci5vc2NwdTsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3QpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3QgPSBuYXZpZ2F0b3IucHJvZHVjdDsKfQppZiAobmF2aWdhdG9yLnByb2R1Y3RTdWIpIHsKICAgIGRldmljZVByaW50LnByb2R1Y3RTdWIgPSBuYXZpZ2F0b3IucHJvZHVjdFN1YjsKfQppZiAobmF2aWdhdG9yLnZlbmRvcikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yID0gbmF2aWdhdG9yLnZlbmRvcjsKfQppZiAobmF2aWdhdG9yLnZlbmRvclN1YikgewogICAgZGV2aWNlUHJpbnQudmVuZG9yU3ViID0gbmF2aWdhdG9yLnZlbmRvclN1YjsKfQppZiAobmF2aWdhdG9yLmxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5sYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnVzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQudXNlckxhbmd1YWdlID0gbmF2aWdhdG9yLnVzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSkgewogICAgZGV2aWNlUHJpbnQuYnJvd3Nlckxhbmd1YWdlID0gbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZTsKfQppZiAobmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlKSB7CiAgICBkZXZpY2VQcmludC5zeXN0ZW1MYW5ndWFnZSA9IG5hdmlnYXRvci5zeXN0ZW1MYW5ndWFnZTsKfQoKLy8gQXR0ZW1wdCB0byBjb2xsZWN0IGdlby1sb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIHRoaXMgd2l0aCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgovLyBPdGhlcndpc2UsIGlmIGdlby1sb2NhdGlvbiBmYWlscyBvciB0YWtlcyBsb25nZXIgdGhhbiAzMCBzZWNvbmRzLCBhdXRvLXN1Ym1pdCB0aGUgZGF0YSBjb2xsZWN0ZWQgc28gZmFyLgphdXRvU3VibWl0RGVsYXkgPSAzMDAwMDsKb3V0cHV0LnZhbHVlID0gSlNPTi5zdHJpbmdpZnkoZGV2aWNlUHJpbnQpOwpjb2xsZWN0R2VvbG9jYXRpb25JbmZvKGZ1bmN0aW9uKGdlb2xvY2F0aW9uSW5mbykgewogICAgZGV2aWNlUHJpbnQuZ2VvbG9jYXRpb24gPSBnZW9sb2NhdGlvbkluZm87CiAgICBvdXRwdXQudmFsdWUgPSBKU09OLnN0cmluZ2lmeShkZXZpY2VQcmludCk7CiAgICBzdWJtaXQoKTsKfSk7Cg==\",\"default\":true,\"language\":\"JAVASCRIPT\",\"context\":\"AUTHENTICATION_CLIENT_SIDE\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"},{\"_id\":\"484e6246-dbc6-4288-97e6-54e55431402e\",\"name\":\"Apple Profile Normalization\",\"description\":\"Normalizes raw profile data from Apple\",\"script\":\"IlwiLypcXG4gKiBDb3B5cmlnaHQgMjAyMS0yMDIyIEZvcmdlUm9jayBBUy4gQWxsIFJpZ2h0cyBSZXNlcnZlZFxcbiAqXFxuICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUy5cXG4gKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0XFxuICogdG8gc3VjaCBsaWNlbnNlIGJldHdlZW4gdGhlIGxpY2Vuc2VlIGFuZCBGb3JnZVJvY2sgQVMuXFxuICpcXG4gKiBJbiBzb21lIGNvbW1vbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLCB0aGUgZm9sbG93aW5nIGtleXMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vdCBlbXB0eTpcXG4gKiB1c2VybmFtZSwgZ2l2ZW5OYW1lLCBmYW1pbHlOYW1lLCBlbWFpbC5cXG4gKlxcbiAqIEZyb20gUkZDNDUxNzogQSB2YWx1ZSBvZiB0aGUgRGlyZWN0b3J5IFN0cmluZyBzeW50YXggaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmVcXG4gKiBhcmJpdHJhcnkgY2hhcmFjdGVycyBmcm9tIHRoZSBVbml2ZXJzYWwgQ2hhcmFjdGVyIFNldCAoVUNTKS5cXG4gKiBBIHplcm8tbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmcgaXMgbm90IHBlcm1pdHRlZC5cXG4gKi9cXG5cXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuZmllbGRcXG5pbXBvcnQgc3RhdGljIG9yZy5mb3JnZXJvY2suanNvbi5Kc29uVmFsdWUuanNvblxcbmltcG9ydCBzdGF0aWMgb3JnLmZvcmdlcm9jay5qc29uLkpzb25WYWx1ZS5vYmplY3RcXG5cXG5TdHJpbmcgZW1haWwgPSBcXFwiY2hhbmdlQG1lLmNvbVxcXCJcXG5TdHJpbmcgc3ViamVjdElkID0gcmF3UHJvZmlsZS5zdWJcXG5TdHJpbmcgZmlyc3ROYW1lID0gXFxcIiBcXFwiXFxuU3RyaW5nIGxhc3ROYW1lID0gXFxcIiBcXFwiXFxuU3RyaW5nIHVzZXJuYW1lID0gc3ViamVjdElkXFxuU3RyaW5nIG5hbWVcXG5cXG5pZiAocmF3UHJvZmlsZS5pc0RlZmluZWQoXFxcImVtYWlsXFxcIikgJiYgcmF3UHJvZmlsZS5lbWFpbC5pc05vdE51bGwoKSl7IC8vIFVzZXIgY2FuIGVsZWN0IHRvIG5vdCBzaGFyZSB0aGVpciBlbWFpbFxcbiAgICBlbWFpbCA9IHJhd1Byb2ZpbGUuZW1haWwuYXNTdHJpbmcoKVxcbiAgICB1c2VybmFtZSA9IGVtYWlsXFxufVxcbmlmIChyYXdQcm9maWxlLmlzRGVmaW5lZChcXFwibmFtZVxcXCIpICYmIHJhd1Byb2ZpbGUubmFtZS5pc05vdE51bGwoKSkge1xcbiAgICBpZiAocmF3UHJvZmlsZS5uYW1lLmlzRGVmaW5lZChcXFwiZmlyc3ROYW1lXFxcIikgJiYgcmF3UHJvZmlsZS5uYW1lLmZpcnN0TmFtZS5pc05vdE51bGwoKSkge1xcbiAgICAgICAgZmlyc3ROYW1lID0gcmF3UHJvZmlsZS5uYW1lLmZpcnN0TmFtZS5hc1N0cmluZygpXFxuICAgIH1cXG4gICAgaWYgKHJhd1Byb2ZpbGUubmFtZS5pc0RlZmluZWQoXFxcImxhc3ROYW1lXFxcIikgJiYgcmF3UHJvZmlsZS5uYW1lLmxhc3ROYW1lLmlzTm90TnVsbCgpKSB7XFxuICAgICAgICBsYXN0TmFtZSA9IHJhd1Byb2ZpbGUubmFtZS5sYXN0TmFtZS5hc1N0cmluZygpXFxuICAgIH1cXG59XFxuXFxubmFtZSA9IChmaXJzdE5hbWU/LnRyaW0oKSA/IGZpcnN0TmFtZSA6IFxcXCJcXFwiKSArIChsYXN0TmFtZT8udHJpbSgpID8gKChmaXJzdE5hbWU/LnRyaW0oKSA/IFxcXCIgXFxcIiA6IFxcXCJcXFwiKSArIGxhc3ROYW1lKSA6IFxcXCJcXFwiKVxcbm5hbWUgPSAgKCFuYW1lPy50cmltKCkpID8gXFxcIiBcXFwiIDogbmFtZVxcblxcbnJldHVybiBqc29uKG9iamVjdChcXG4gICAgICAgIGZpZWxkKFxcXCJpZFxcXCIsIHN1YmplY3RJZCksXFxuICAgICAgICBmaWVsZChcXFwiZGlzcGxheU5hbWVcXFwiLCBuYW1lKSxcXG4gICAgICAgIGZpZWxkKFxcXCJlbWFpbFxcXCIsIGVtYWlsKSxcXG4gICAgICAgIGZpZWxkKFxcXCJnaXZlbk5hbWVcXFwiLCBmaXJzdE5hbWUpLFxcbiAgICAgICAgZmllbGQoXFxcImZhbWlseU5hbWVcXFwiLCBsYXN0TmFtZSksXFxuICAgICAgICBmaWVsZChcXFwidXNlcm5hbWVcXFwiLCB1c2VybmFtZSkpKVwiXG4i\",\"default\":true,\"language\":\"GROOVY\",\"context\":\"SOCIAL_IDP_PROFILE_TRANSFORMATION\",\"createdBy\":\"null\",\"creationDate\":0,\"lastModifiedBy\":\"null\",\"lastModifiedDate\":0,\"evaluatorVersion\":\"1.0\"}],\"resultCount\":58,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":0}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.0,resource=1.1, resource=1.1" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:09 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 800, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:09.726Z", - "time": 149, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 149 - } - }, - { - "_id": "24d2c28f298a4ab9e1d6bb34fa57b96f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2022, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services?_action=nextdescendents" - }, - "response": { - "bodySize": 186180, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 186180, - "text": "{\"result\":[{\"emailAddressAttribute\":\"mail\",\"transportType\":\"default-smtp\",\"emailRateLimitSeconds\":1,\"emailImplClassName\":\"org.forgerock.openam.services.email.MailServerImpl\",\"port\":465,\"sslState\":\"SSL\",\"_id\":\"email\",\"_type\":{\"_id\":\"email\",\"name\":\"Email Service\",\"collection\":false}},{\"enable\":true,\"_id\":\"TNTPPingOneService\",\"_type\":{\"_id\":\"TNTPPingOneService\",\"name\":\"PingOne Service\",\"collection\":false}},{\"userAliasEnabled\":false,\"connectionPoolMinimumSize\":1,\"maximumSearchResults\":100,\"policyHeartbeatTimeUnit\":\"SECONDS\",\"searchTimeout\":5,\"usersSearchAttribute\":\"uid\",\"policyHeartbeatInterval\":10,\"usersSearchScope\":\"SCOPE_SUB\",\"subjectsResultTTL\":10,\"checkIfResourceTypeExists\":true,\"connectionPoolMaximumSize\":10,\"sslEnabled\":{\"$bool\":\"&{am.stores.ssl.enabled}\"},\"bindDn\":\"&{am.stores.user.username}\",\"ldapServer\":[\"userstore-1.userstore:1389\",\"userstore-0.userstore:1389\",\"userstore-2.userstore:1389\"],\"mtlsEnabled\":false,\"bindPassword\":{\"$string\":\"&{am.stores.user.password}\"},\"realmSearchFilter\":\"(objectclass=sunismanagedorganization)\",\"usersSearchFilter\":\"(objectclass=inetorgperson)\",\"usersBaseDn\":\"ou=identities\",\"_id\":\"policyconfiguration\",\"_type\":{\"_id\":\"policyconfiguration\",\"name\":\"Policy Configuration\",\"collection\":false}},{\"treeMapping\":{\"forgottenUsername\":\"ForgottenUsername\",\"registration\":\"Registration\",\"resetPassword\":\"ResetPassword\",\"updatePassword\":\"UpdatePassword\"},\"enabled\":true,\"_id\":\"selfServiceTrees\",\"_type\":{\"_id\":\"selfServiceTrees\",\"name\":\"Self Service Trees\",\"collection\":false}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogUHJlcGFyZSBBY2NvdW50IENyZWF0aW9uCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIFNldCB1c2VybmFtZSBmcm9tIGVtYWlsIGFuZCBjb3B5IGZpcnN0IGFuZCBsYXN0IG5hbWUgdG8gYXBwbGljYW50IGF0dHJpYnV0ZXMuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICovCihmdW5jdGlvbiAoKSB7CiAgb3V0Y29tZSA9ICJ0cnVlIjsKCiAgc2hhcmVkU3RhdGUucHV0KCJ1c2VybmFtZSIsIGdldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgibWFpbCIpKQogIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgidXNlck5hbWUiLCBnZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoIm1haWwiKSkKICBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoImN1c3RvbV92ZXJpZmllZEZpcnN0TmFtZSIsIGdldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgiZ2l2ZW5OYW1lIikpCiAgc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKCJjdXN0b21fdmVyaWZpZWRMYXN0TmFtZSIsIGdldFNoYXJlZE9iamVjdEF0dHJpYnV0ZSgic24iKSkKICBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUoImN1c3RvbV92ZXJpZnlTdGF0dXMiLCAnTm90IHZlcmlmaWVkJykKCiAgLyoKICAgKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7CiAgICAgICB2YXIgc3RvcmFnZSA9IHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwogICAgICBpZiAoc3RvcmFnZSAmJiB2YWx1ZSkgewogICAgICAgICAgaWYgKHN0b3JhZ2UucHV0KSB7CiAgICAgICAgICAgICAgICBzdG9yYWdlLnB1dChuYW1lLCB2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICBzdG9yYWdlW25hbWVdID0gdmFsdWU7CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSBpZiAodmFsdWUpIHsKICAgICAgICAgIHNoYXJlZFN0YXRlLnB1dCgib2JqZWN0QXR0cmlidXRlcyIsIEpTT04ucGFyc2UoIntcIiIrbmFtZSsiXCI6XCIiK3ZhbHVlKyJcIn0iKSk7CiAgICAgIH0KICB9CgogIC8qCiAgICogUmVhZCBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gZ2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKG5hbWUpIHsKICAgICAgdmFyIHN0b3JhZ2UgPSBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgICAgaWYgKHN0b3JhZ2UpIHsKICAgICAgICAgIGlmIChzdG9yYWdlLmdldCkgewogICAgICAgICAgICAgIHJldHVybiBzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKS5nZXQobmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICByZXR1cm4gc3RvcmFnZS5uYW1lOwogICAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogIH0KfSgpKTsK\",\"description\":\"Set username from email and copy first and last name to applicant attributes.\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Prepare Account Creation\",\"_id\":\"835c3d04-4883-4fb7-b957-bd6ff6ff9d50\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"description\":\"Default bravo realm script for OIDC claims\",\"lastModifiedBy\":\"null\",\"context\":\"OIDC_CLAIMS\",\"lastModifiedDate\":\"0\",\"name\":\"Bravo OIDC Claims Script - imported (1)\",\"_id\":\"cadaa25c-8347-48b1-84e9-cf8c3314cac0\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V2_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogUmVzb2x2ZSBVc2VybmFtZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDaGVjayBpZiB1c2VybmFtZSBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkIHRvIF9pZC4KICogUmV0dXJuICJ0cnVlIiBpZiByZXNvbHZlZCwgImZhbHNlIiBvdGhlcndpc2UuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogLSBmYWxzZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIGlmIChub2RlU3RhdGUuZ2V0KCJfaWQiKSkgewogICAgICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gImZhbHNlIjsKICAgIH0KfSgpKTsK\",\"description\":\"Check if username has already been resolved to _id.\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Check Resolved Username\",\"_id\":\"ffcfbd20-38d5-4f74-8766-7df90af4dbe4\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"KGZ1bmN0aW9uICgpIHsKICBpZiAoc2NvcGVzLmNvbnRhaW5zKCdmcjphdXRvYWNjZXNzOionKSB8fCBzY29wZXMuY29udGFpbnMoJ2ZyOmlnYToqJykgfHwgc2NvcGVzLmNvbnRhaW5zKCdmcjppZGM6YW5hbHl0aWNzOionKSkgewogICAgdmFyIGZyID0gSmF2YUltcG9ydGVyKAogICAgICBjb20uc3VuLmlkZW50aXR5LmlkbS5JZFR5cGUKICAgICk7CiAgICB2YXIgZ3JvdXBzID0gW107CiAgICBpZGVudGl0eS5nZXRNZW1iZXJzaGlwcyhmci5JZFR5cGUuR1JPVVApLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkgewogICAgICBncm91cHMucHVzaChncm91cC5nZXRBdHRyaWJ1dGUoJ2NuJykudG9BcnJheSgpWzBdKTsKICAgIH0pOwogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ2dyb3VwcycsIGdyb3Vwcyk7CiAgfQp9KCkpOwo=\",\"description\":\"Used by endUserUIClient\",\"lastModifiedBy\":\"null\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"lastModifiedDate\":\"0\",\"name\":\"Bravo endUserUIClient OAuth2 Access Token Modification Script\",\"_id\":\"449ef739-828e-42b4-92d6-0456d378671e\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwooZnVuY3Rpb24gKCkgewogICAgaWYgKG51bGwgIT0gc2hhcmVkU3RhdGUuZ2V0KCJ1c2VybmFtZSIpKSB7CiAgICAgICAgb3V0Y29tZSA9ICJrbm93biI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gInVua25vd24iOwogICAgfQp9KCkpOwo=\",\"description\":\"Check if username has already been collected.\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Check Username\",\"_id\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V2_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogRnVsbCBWZXJpZmljYXRpb24gUmVzdWx0cwogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBTaG93IGZ1bGwgaWRlbnRpdHkgdmVyaWZpY2F0aW9uIHJlc3VsdHMKICogCiAqIFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgbWF5IG5vdCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICovCihmdW5jdGlvbiAoKSB7CiAgb3V0Y29tZSA9ICd0cnVlJzsKCiAgdmFyIHAxVXNlcklkQW1BdHRyID0gJ2ZyLWF0dHItaXN0cjEnOwogIHZhciBwMVVzZXJJZElkbUF0dHIgPSAnZnJJbmRleGVkU3RyaW5nMSc7CiAgdmFyIHNlbGZpZUFtQXR0ciA9ICdmci1hdHRyLXN0cjEnOwogIHZhciBzZWxmaWVJZG1BdHRyID0gJ2ZyVW5pbmRleGVkU3RyaW5nMSc7CiAgdmFyIHBvcnRyYWl0QW1BdHRyID0gJ2ZyLWF0dHItc3RyMic7CiAgdmFyIHBvcnRyYWl0SWRtQXR0ciA9ICdmclVuaW5kZXhlZFN0cmluZzInOwogIHZhciBmaXJzdE5hbWVBdHRyID0gJ2dpdmVuTmFtZSc7CiAgdmFyIGxhc3ROYW1lQXR0ciA9ICdzbic7CiAgdmFyIG1ldGFEYXRhQW1BdHRyID0gJ2ZyLWF0dHItc3RyMyc7CiAgdmFyIG1ldGFEYXRhSWRtQXR0ciA9ICdmclVuaW5kZXhlZFN0cmluZzMnOwogIHZhciBjdXN0b21JZG1BdHRycyA9ICdmci1pZG0tY3VzdG9tLWF0dHJzJzsKICB2YXIgdmVyaWZpZWRGaXJzdE5hbWVBdHRyID0gJ2N1c3RvbV92ZXJpZmllZEZpcnN0TmFtZSc7CiAgdmFyIHZlcmlmaWVkTGFzdE5hbWVBdHRyID0gJ2N1c3RvbV92ZXJpZmllZExhc3ROYW1lJzsKICB2YXIgdmVyaWZ5U3RhdHVzQXR0ciA9ICdjdXN0b21fdmVyaWZ5U3RhdHVzJzsKICAKICB2YXIgaWRlbnRpdHkgPSBpZFJlcG9zaXRvcnkuZ2V0SWRlbnRpdHkobm9kZVN0YXRlLmdldCgnX2lkJykpOwogIHZhciBwMVVzZXJJZCA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZVZhbHVlcyhwMVVzZXJJZEFtQXR0cilbMF07CiAgdmFyIHNlbGZpZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZVZhbHVlcyhzZWxmaWVBbUF0dHIpWzBdOwogIHZhciBwb3J0cmFpdCA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZVZhbHVlcyhwb3J0cmFpdEFtQXR0cilbMF07CiAgdmFyIGZpcnN0TmFtZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZVZhbHVlcyhmaXJzdE5hbWVBdHRyKVswXTsKICB2YXIgbGFzdE5hbWUgPSBpZGVudGl0eS5nZXRBdHRyaWJ1dGVWYWx1ZXMobGFzdE5hbWVBdHRyKVswXTsKICB2YXIgbWV0YURhdGEgPSBKU09OLnBhcnNlKGlkZW50aXR5LmdldEF0dHJpYnV0ZVZhbHVlcyhtZXRhRGF0YUFtQXR0cilbMF0pOwogIHZhciBjdXN0b21BdHRycyA9IEpTT04ucGFyc2UoaWRlbnRpdHkuZ2V0QXR0cmlidXRlVmFsdWVzKGN1c3RvbUlkbUF0dHJzKVswXSk7CgogIHZhciBhbmNob3IgPSAnYW5jaG9yLScuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgdmFyIGhhbGlnbiA9ICdsZWZ0JzsKICB2YXIgcmVmZXJlbmNlSW1hZ2UgPSAnPGltZyBzcmM9ImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsICcrcG9ydHJhaXQrJyIgYWx0PSJSZWZlcmVuY2UgSW1hZ2UiIHN0eWxlPSJoZWlnaHQ6IGF1dG87IHdpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb3ZlciIgLz4nOwogIHZhciBmcmVzaFNlbGZpZUltZyA9ICc8aW1nIHNyYz0iZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwgJytzZWxmaWUrJyIgYWx0PSJGcmVzaCBTZWxmaWUiIHN0eWxlPSJoZWlnaHQ6IGF1dG87IHdpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb3ZlciIgLz4nOwogIHZhciBmaXJzdE5hbWVNYXRjaCA9IGdldEJpb2dyYXBoaWNNYXRjaFJlc3VsdChtZXRhRGF0YSwgJ2dpdmVuX25hbWUnKTsKICB2YXIgbGFzdE5hbWVNYXRjaCA9IGdldEJpb2dyYXBoaWNNYXRjaFJlc3VsdChtZXRhRGF0YSwgJ2ZhbWlseV9uYW1lJyk7CiAgdmFyIGlkZW50aXR5VGFibGUgPSBgXAogICAgICA8dGFibGUgc3R5bGU9IndpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluIj5cCiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDI1JTsgdGV4dC1hbGlnbjogcmlnaHQ7Ij5JZGVudGlmaWVyPC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiAyJTsiPjwvdGQ+XAogICAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDogMjUlOyB0ZXh0LWFsaWduOiBsZWZ0OyI+QXBwbGljYXRpb248L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDMwJTsgdGV4dC1hbGlnbjogbGVmdDsiPkdvdmVybm1lbnQgSUQ8L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDE4JTsgdGV4dC1hbGlnbjogbGVmdDsiPk1hdGNoPC90ZD5cCiAgICAgICAgPC90cj5cCiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij5GaXJzdCBOYW1lPC90ZD5cCiAgICAgICAgICA8dGQ+OjwvdGQ+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+JHtmaXJzdE5hbWV9PC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij4ke2N1c3RvbUF0dHJzW3ZlcmlmaWVkRmlyc3ROYW1lQXR0cl19PC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7ICR7Y29sb3JpemUoZmlyc3ROYW1lTWF0Y2gpfSI+JHtmaXJzdE5hbWVNYXRjaH08L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPkxhc3QgTmFtZTwvdGQ+XAogICAgICAgICAgPHRkPjo8L3RkPlwKICAgICAgICAgIDx0ZD4ke2xhc3ROYW1lfTwvdGQ+XAogICAgICAgICAgPHRkPiR7Y3VzdG9tQXR0cnNbdmVyaWZpZWRMYXN0TmFtZUF0dHJdfTwvdGQ+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyAke2NvbG9yaXplKGxhc3ROYW1lTWF0Y2gpfSI+JHtsYXN0TmFtZU1hdGNofTwvdGQ+XAogICAgICAgIDwvdHI+XAogICAgICA8L3RhYmxlPmA7CiAgdmFyIGRvY1N0cnVjdEpkZ21udCA9IGdldE1pdGVrUmVzdWx0KG1ldGFEYXRhLCAnRG9jdW1lbnQgU3RydWN0dXJlJykuanVkZ2VtZW50OwogIHZhciBkb2NEYXRhQ29tcEpkZ21udCA9IGdldE1pdGVrUmVzdWx0KG1ldGFEYXRhLCAnRG9jdW1lbnQgRGF0YSBDb21wYXJpc29uJykuanVkZ2VtZW50OwogIHZhciBodW1hbkZhY2VKZGdtbnQgPSBnZXRNaXRla1Jlc3VsdChtZXRhRGF0YSwgJ0h1bWFuIEZhY2UgUHJlc2VuY2UnKS5qdWRnZW1lbnQKICB2YXIgZmllbGRWYWxpZEpkZ21udCA9IGdldE1pdGVrUmVzdWx0KG1ldGFEYXRhLCAnRmllbGQgVmFsaWRhdGlvbicpLmp1ZGdlbWVudDsKICB2YXIgYmxhY2tsaXN0SmRnbW50ID0gZ2V0TWl0ZWtSZXN1bHQobWV0YURhdGEsICdJRCBEb2N1bWVudCBCbGFja2xpc3QnKS5qdWRnZW1lbnQ7CiAgdmFyIGJhcmNvZGVKZGdtbnQgPSBnZXRNaXRla1Jlc3VsdChtZXRhRGF0YSwgJ0JhcmNvZGUgQW5hbHlzaXMnKS5qdWRnZW1lbnQ7CiAgdmFyIGdvdkRvY1RhYmxlID0gYFwKICAgICAgPHRhYmxlIHN0eWxlPSJ3aWR0aDogMTAwJTsgb2JqZWN0LWZpdDogY29udGFpbiI+XAogICAgICAgIDx0cj5cCiAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiA0OSU7IHRleHQtYWxpZ246IHJpZ2h0OyI+RG9jdW1lbnQgU3RydWN0dXJlPC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiAyJTsiPjo8L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDQ5JTsgdGV4dC1hbGlnbjogbGVmdDsgJHtjb2xvcml6ZShkb2NTdHJ1Y3RKZGdtbnQpfSI+JHtkb2NTdHJ1Y3RKZGdtbnR9PC90ZD5cCiAgICAgICAgPC90cj5cCiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij5Eb2N1bWVudCBEYXRhIENvbXBhcmlzb248L3RkPlwKICAgICAgICAgIDx0ZD46PC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9IiR7Y29sb3JpemUoZG9jRGF0YUNvbXBKZGdtbnQpfSI+JHtkb2NEYXRhQ29tcEpkZ21udH08L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPkh1bWFuIEZhY2UgUHJlc2VuY2U8L3RkPlwKICAgICAgICAgIDx0ZD46PC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9IiR7Y29sb3JpemUoaHVtYW5GYWNlSmRnbW50KX0iPiR7aHVtYW5GYWNlSmRnbW50fTwvdGQ+XAogICAgICAgIDwvdHI+XAogICAgICAgIDx0cj5cCiAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+RmllbGQgVmFsaWRhdGlvbjwvdGQ+XAogICAgICAgICAgPHRkPjo8L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0iJHtjb2xvcml6ZShmaWVsZFZhbGlkSmRnbW50KX0iPiR7ZmllbGRWYWxpZEpkZ21udH08L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPklEIERvY3VtZW50IEJsYWNrbGlzdDwvdGQ+XAogICAgICAgICAgPHRkPjo8L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0iJHtjb2xvcml6ZShibGFja2xpc3RKZGdtbnQpfSI+JHtibGFja2xpc3RKZGdtbnR9PC90ZD5cCiAgICAgICAgPC90cj5cCiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij5CYXJjb2RlIEFuYWx5c2lzPC90ZD5cCiAgICAgICAgICA8dGQ+OjwvdGQ+XAogICAgICAgICAgPHRkIHN0eWxlPSIke2NvbG9yaXplKGJhcmNvZGVKZGdtbnQpfSI+JHtiYXJjb2RlSmRnbW50fTwvdGQ+XAogICAgICAgIDwvdHI+XAogICAgICA8L3RhYmxlPmA7CiAgdmFyIHNpbWlsYXJpdHkgPSBnZXRTaW1pbGFyaXR5KGdldFJlc3VsdChtZXRhRGF0YSwgJ0ZBQ0lBTF9DT01QQVJJU09OJykuZGF0YS5zaW1pbGFyaXR5KTsKICB2YXIgbGl2ZW5lc3MgPSBnZXRMaXZlbmVzcyhnZXRSZXN1bHQobWV0YURhdGEsICdMSVZFTkVTUycpLmRhdGEucHJvYmFiaWxpdHkpOwogIHZhciBmYWNpYWxUYWJsZSA9IGBcCiAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW4iPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDogNDklOyB0ZXh0LWFsaWduOiByaWdodDsiPkZhY2lhbCBDb21wYXJpc29uPC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiAyJTsiPjo8L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDQ5JTsgdGV4dC1hbGlnbjogbGVmdDsgJHtjb2xvcml6ZShzaW1pbGFyaXR5KX0iPiR7c2ltaWxhcml0eX08L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPkxpdmVuZXNzPC90ZD5cCiAgICAgICAgICA8dGQ+OjwvdGQ+XAogICAgICAgICAgPHRkIHN0eWxlPSIke2NvbG9yaXplKGxpdmVuZXNzKX0iPiR7bGl2ZW5lc3N9PC90ZD5cCiAgICAgICAgPC90cj5cCiAgICAgIDwvdGFibGU+YDsKICB2YXIgc2VsZmllVGFibGUgPSBgXAogICAgICA8dGFibGUgc3R5bGU9IndpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluIj5cCiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+PGg0PkdvdmVybm1lbnQgSUQgUGljdHVyZTwvaDQ+PC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxoND5GcmVzaCBTZWxmaWU8L2g0PjwvdGQ+XAogICAgICAgIDwvdHI+XAogICAgICAgIDx0ciBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDUwJTsiPiR7cmVmZXJlbmNlSW1hZ2V9PC90ZD5cCiAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiA1MCU7Ij4ke2ZyZXNoU2VsZmllSW1nfTwvdGQ+XAogICAgICAgIDwvdHI+XAogICAgICA8L3RhYmxlPmA7CiAgdmFyIG1lc3NhZ2UgPSBgXAogICAgICA8cD48aDMgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPlN0YXR1czwvaDM+PC9wPlwKICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgJHtjb2xvcml6ZShjdXN0b21BdHRyc1t2ZXJpZnlTdGF0dXNBdHRyXSl9Ij4ke2N1c3RvbUF0dHJzW3ZlcmlmeVN0YXR1c0F0dHJdfTwvcD5cCiAgICAgIDxwPjxoMyBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+SWRlbnRpdHk8L2gzPjwvcD5cCiAgICAgICR7aWRlbnRpdHlUYWJsZX1cCiAgICAgIDxwPjxoMyBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+R292ZXJubWVudCBJRCBBdXRoZW50aWNhdGlvbjwvaDM+PC9wPlwKICAgICAgJHtnb3ZEb2NUYWJsZX1cCiAgICAgIDxwPjxoMyBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+RmFjaWFsIENvbXBhcmlzb24gJiBMaXZlbmVzczwvaDM+PC9wPlwKICAgICAgJHtmYWNpYWxUYWJsZX1cCiAgICAgIDxici8+JHtzZWxmaWVUYWJsZX1gOwogIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4iLmNvbmNhdCgKICAgICJkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYWxsYmFjay1jb21wb25lbnQnKSkuZm9yRWFjaChcbiIpLmNvbmNhdCgKICAgICJmdW5jdGlvbiAoZSkge1xuIikuY29uY2F0KAogICAgIiAgdmFyIG1lc3NhZ2UgPSBlLmZpcnN0RWxlbWVudENoaWxkO1xuIikuY29uY2F0KAogICAgIiAgY29uc29sZS5sb2coJ2hlcmUhJyk7XG4iKS5jb25jYXQoCiAgICAiICBpZiAobWVzc2FnZS5maXJzdENoaWxkICYmIG1lc3NhZ2UuZmlyc3RDaGlsZC5ub2RlTmFtZSA9PSAnI3RleHQnICYmIG1lc3NhZ2UuZmlyc3RDaGlsZC5ub2RlVmFsdWUudHJpbSgpID09ICciKS5jb25jYXQoYW5jaG9yKS5jb25jYXQoIicpIHtcbiIpLmNvbmNhdCgKICAgICIgICAgbWVzc2FnZS5jbGFzc05hbWUgPSBcInRleHQtbGVmdFwiO1xuIikuY29uY2F0KAogICAgIiAgICBtZXNzYWdlLmFsaWduID0gXCIiKS5jb25jYXQoaGFsaWduKS5jb25jYXQoIlwiO1xuIikuY29uY2F0KAogICAgIiAgICBtZXNzYWdlLmlubmVySFRNTCA9ICciKS5jb25jYXQobWVzc2FnZSkuY29uY2F0KCInO1xuIikuY29uY2F0KAogICAgIiAgfVxuIikuY29uY2F0KAogICAgIn0pIikKICBpZiAoY2FsbGJhY2tzLmlzRW1wdHkoKSkgewogICAgY2FsbGJhY2tzQnVpbGRlci50ZXh0T3V0cHV0Q2FsbGJhY2soMCwgYW5jaG9yKTsKICAgIGNhbGxiYWNrc0J1aWxkZXIuc2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCk7CiAgfSBlbHNlIHsKICAgIGFjdGlvbiA9IGFjdGlvbi5nb1RvKCd0cnVlJyk7CiAgfQoKICBmdW5jdGlvbiBnZXRTaW1pbGFyaXR5KG51bSkgewogICAgaWYgKG51bSA+PSA4NSkgcmV0dXJuICdIaWdoJzsKICAgIGlmIChudW0gPj0gNjUpIHJldHVybiAnTWVkaXVtJzsKICAgIHJldHVybiAnTG93JzsKICB9CgogIGZ1bmN0aW9uIGdldExpdmVuZXNzKG51bSkgewogICAgaWYgKG51bSA+PSAwLjUpIHJldHVybiAnTGl2ZSc7CiAgICByZXR1cm4gJ1Nwb29mZWQnCiAgfQoKICBmdW5jdGlvbiBjb2xvcml6ZSh0ZXh0KSB7CiAgICB2YXIgY29sb3IgPSAnJzsKICAgIHZhciBzdWNjZXNzID0gJ2dyZWVuJzsKICAgIHZhciBzb3NvID0gJ3llbGxvdyc7CiAgICB2YXIgZmFpbHVyZSA9ICdyZWQnOwogICAgdmFyIGNvbG9ycyA9IHsKICAgICAgICAnbm90X2F1dGhlbnRpYyc6IGBjb2xvcjoke2ZhaWx1cmV9O2AsCiAgICAgICAgJ3N1Y2Nlc3MnOiBgY29sb3I6JHtzdWNjZXNzfTtgLAogICAgICAgICdhdXRoZW50aWMnOiBgY29sb3I6JHtzdWNjZXNzfTtgLAogICAgICAgICdsaXZlJzogYGNvbG9yOiR7c3VjY2Vzc307YCwKICAgICAgICAnaGlnaCc6IGBjb2xvcjoke3N1Y2Nlc3N9O2AsCiAgICAgICAgJ21lZGl1bSc6IGBjb2xvcjoke3Nvc299O2AsCiAgICAgICAgJ2ZhaWwnOiBgY29sb3I6JHtmYWlsdXJlfTtgLAogICAgICAgICdsb3cnOiBgY29sb3I6JHtmYWlsdXJlfTtgLAogICAgICAgICdzcG9vZmVkJzogYGNvbG9yOiR7ZmFpbHVyZX07YCwKICAgIH07CiAgICBPYmplY3Qua2V5cyhjb2xvcnMpLmZvckVhY2goKGl0KSA9PiB7CiAgICAgICAgaWYgKHRleHQudG9Mb3dlckNhc2UoKS5pbmRleE9mKGl0KSA+PSAwKSBjb2xvciA9IGNvbG9yc1tpdF07CiAgICAgICAgcmV0dXJuOwogICAgfSk7CiAgICByZXR1cm4gY29sb3I7CiAgfQogICAgCiAgZnVuY3Rpb24gZ2V0UmVzdWx0KG1ldGFEYXRhLCB0eXBlKSB7CiAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgIGlmIChtZXRhRGF0YSAmJiB0eXBlKSB7CiAgICAgIG1ldGFEYXRhLl9lbWJlZGRlZC5tZXRhRGF0YS5mb3JFYWNoKChpdCkgPT4gewogICAgICAgIGlmIChpdC50eXBlID09PSB0eXBlKSB7CiAgICAgICAgICByZXN1bHQgPSBpdDsgCiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogICAgCiAgZnVuY3Rpb24gZ2V0TWl0ZWtSZXN1bHQobWV0YURhdGEsIG5hbWUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgdmFyIG1pdGVrUmVzdWx0cyA9IGdldFJlc3VsdChtZXRhRGF0YSwgJ0RPQ1VNRU5UX0FVVEhFTlRJQ0FUSU9OJyk7CiAgICBpZiAobWl0ZWtSZXN1bHRzICYmIG5hbWUpIHsKICAgICAgbWl0ZWtSZXN1bHRzLmRhdGEubWl0ZWtWZXJpZmljYXRpb25zLmZvckVhY2goKGl0KSA9PiB7CiAgICAgICAgaWYgKGl0Lm5hbWUgPT09IG5hbWUpIHsKICAgICAgICAgIHJlc3VsdCA9IGl0OyAKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgICAKICBmdW5jdGlvbiBnZXRCaW9ncmFwaGljTWF0Y2hSZXN1bHQobWV0YURhdGEsIGZpZWxkKSB7CiAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgIHZhciBiaW9ncmFwaGljTWF0Y2hSZXN1bHQgPSBnZXRSZXN1bHQobWV0YURhdGEsICdCSU9HUkFQSElDX01BVENIJyk7CiAgICBpZiAoYmlvZ3JhcGhpY01hdGNoUmVzdWx0ICYmIGZpZWxkKSB7CiAgICAgIGJpb2dyYXBoaWNNYXRjaFJlc3VsdC5kYXRhLmJpb2dyYXBoaWNfbWF0Y2hfcmVzdWx0cy5mb3JFYWNoKChpdCkgPT4gewogICAgICAgIGlmIChpdC5pZGVudGlmaWVyID09PSBmaWVsZCkgewogICAgICAgICAgcmVzdWx0ID0gaXQubWF0Y2g7IAogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoKICAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICAqCiAgICogRXhhbXBsZToKICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICovCiAgZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbiAoYykgewogICAgICB2YXIgciA9IChNYXRoLnJhbmRvbSgpICogMTApIHwgMDsKICAgICAgdmFyIHYgPSByOwogICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKICB9CgogIC8qCiAgICogUmVhZCBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gZ2V0T2JqZWN0QXR0cmlidXRlKG5hbWUpIHsKICAgIHZhciBhdHRyaWJ1dGVzID0gbm9kZVN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwogICAgaWYgKGF0dHJpYnV0ZXMpIHsKICAgICAgaWYgKGF0dHJpYnV0ZXMuZ2V0KSB7CiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0KG5hbWUpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm5hbWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLyoKICAgKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7CiAgICB2YXIgYXR0cmlidXRlcyA9IG5vZGVTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgIGlmIChhdHRyaWJ1dGVzICYmIHZhbHVlKSB7CiAgICAgIGF0dHJpYnV0ZXMucHV0KG5hbWUsIHZhbHVlKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgib2JqZWN0QXR0cmlidXRlcyIsIGF0dHJpYnV0ZXMpOwogICAgfSBlbHNlIGlmICh2YWx1ZSkgewogICAgICBub2RlU3RhdGUucHV0U2hhcmVkKCJvYmplY3RBdHRyaWJ1dGVzIiwgeyBuYW1lOiB2YWx1ZSB9ICk7CiAgICB9CiAgfQp9KCkpOwo=\",\"description\":\"Show full identity verification results\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Full Verification Results\",\"_id\":\"ca0c39c5-9c50-417f-a36e-815cfd1ecffe\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V2_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogU2VsZmllIEF1dGhlbnRpY2F0aW9uIFJlc3VsdHMKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogU2hvdyBzZWxmaWUgYXV0aGVudGljYXRpb24gcmVzdWx0cwogKiAKICogVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCBtYXkgbm90IHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICBvdXRjb21lID0gJ3RydWUnOwoKICB2YXIgcDFVc2VySWRBbUF0dHIgPSAnZnItYXR0ci1pc3RyMSc7CiAgdmFyIHAxVXNlcklkSWRtQXR0ciA9ICdmckluZGV4ZWRTdHJpbmcxJzsKICB2YXIgc2VsZmllQW1BdHRyID0gJ2ZyLWF0dHItc3RyMSc7CiAgdmFyIHNlbGZpZUlkbUF0dHIgPSAnZnJVbmluZGV4ZWRTdHJpbmcxJzsKICB2YXIgZmlyc3ROYW1lQXR0ciA9ICdnaXZlbk5hbWUnOwogIHZhciBsYXN0TmFtZUF0dHIgPSAnc24nOwogIAogIHZhciBpZGVudGl0eSA9IGlkUmVwb3NpdG9yeS5nZXRJZGVudGl0eShub2RlU3RhdGUuZ2V0KCdfaWQnKSk7CiAgdmFyIHAxVXNlcklkID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlVmFsdWVzKHAxVXNlcklkQW1BdHRyKVswXTsKICB2YXIgc2VsZmllID0gZ2V0T2JqZWN0QXR0cmlidXRlKHNlbGZpZUlkbUF0dHIpID8gZ2V0T2JqZWN0QXR0cmlidXRlKHNlbGZpZUlkbUF0dHIpIDogaWRlbnRpdHkuZ2V0QXR0cmlidXRlVmFsdWVzKHNlbGZpZUFtQXR0cilbMF07CiAgdmFyIGZpcnN0TmFtZSA9IGdldE9iamVjdEF0dHJpYnV0ZShmaXJzdE5hbWVBdHRyKSA/IGdldE9iamVjdEF0dHJpYnV0ZShmaXJzdE5hbWVBdHRyKSA6IGlkZW50aXR5LmdldEF0dHJpYnV0ZVZhbHVlcyhmaXJzdE5hbWVBdHRyKVswXTsKICB2YXIgbGFzdE5hbWUgPSBnZXRPYmplY3RBdHRyaWJ1dGUobGFzdE5hbWVBdHRyKSA/IGdldE9iamVjdEF0dHJpYnV0ZShsYXN0TmFtZUF0dHIpIDogaWRlbnRpdHkuZ2V0QXR0cmlidXRlVmFsdWVzKGxhc3ROYW1lQXR0cilbMF07CgogIHZhciBhbmNob3IgPSAnYW5jaG9yLScuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgdmFyIGhhbGlnbiA9ICdsZWZ0JzsKICB2YXIgcmVmZXJlbmNlSW1hZ2UgPSAnPGltZyBzcmM9ImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsICcrc2VsZmllKyciIGFsdD0iUmVmZXJlbmNlIEltYWdlIiBzdHlsZT0iaGVpZ2h0OiBhdXRvOyB3aWR0aDogMTAwJTsgb2JqZWN0LWZpdDogY292ZXIiIC8+JzsKICB2YXIgaWRlbnRpdHlUYWJsZSA9IGBcCiAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW4iPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDogNDklOyB0ZXh0LWFsaWduOiByaWdodDsiPkZpcnN0IE5hbWU8L3RkPlwKICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDIlOyI+OjwvdGQ+XAogICAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDogNDklOyB0ZXh0LWFsaWduOiBsZWZ0OyI+JHtmaXJzdE5hbWV9PC90ZD5cCiAgICAgICAgPC90cj5cCiAgICAgICAgPHRyPlwKICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij5MYXN0IE5hbWU8L3RkPlwKICAgICAgICAgIDx0ZD46PC90ZD5cCiAgICAgICAgICA8dGQ+JHtsYXN0TmFtZX08L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgPC90YWJsZT5gOwogIHZhciBzZWxmaWVUYWJsZSA9IGBcCiAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCU7IG9iamVjdC1maXQ6IGNvbnRhaW4iPlwKICAgICAgICA8dHI+XAogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48aDQ+UmVmZXJlbmNlIEltYWdlPC9oND48L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgICA8dHIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij5cCiAgICAgICAgICA8dGQ+JHtyZWZlcmVuY2VJbWFnZX08L3RkPlwKICAgICAgICA8L3RyPlwKICAgICAgPC90YWJsZT5gOwogIHZhciBtZXNzYWdlID0gYFwKICAgICAgPHA+PGgzIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij5JZGVudGl0eTwvaDM+PC9wPlwKICAgICAgJHtpZGVudGl0eVRhYmxlfVwKICAgICAgPGJyLz4ke3NlbGZpZVRhYmxlfWA7CiAgdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICAgImRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NhbGxiYWNrLWNvbXBvbmVudCcpKS5mb3JFYWNoKFxuIikuY29uY2F0KAogICAgImZ1bmN0aW9uIChlKSB7XG4iKS5jb25jYXQoCiAgICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgICAiICBjb25zb2xlLmxvZygnaGVyZSEnKTtcbiIpLmNvbmNhdCgKICAgICIgIGlmIChtZXNzYWdlLmZpcnN0Q2hpbGQgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVOYW1lID09ICcjdGV4dCcgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVWYWx1ZS50cmltKCkgPT0gJyIpLmNvbmNhdChhbmNob3IpLmNvbmNhdCgiJykge1xuIikuY29uY2F0KAogICAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgICAiICAgIG1lc3NhZ2UuYWxpZ24gPSBcIiIpLmNvbmNhdChoYWxpZ24pLmNvbmNhdCgiXCI7XG4iKS5jb25jYXQoCiAgICAiICAgIG1lc3NhZ2UuaW5uZXJIVE1MID0gJyIpLmNvbmNhdChtZXNzYWdlKS5jb25jYXQoIic7XG4iKS5jb25jYXQoCiAgICAiICB9XG4iKS5jb25jYXQoCiAgICAifSkiKQogIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBjYWxsYmFja3NCdWlsZGVyLnRleHRPdXRwdXRDYWxsYmFjaygwLCBhbmNob3IpOwogICAgY2FsbGJhY2tzQnVpbGRlci5zY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2soc2NyaXB0KTsKICB9IGVsc2UgewogICAgYWN0aW9uID0gYWN0aW9uLmdvVG8oJ3RydWUnKTsKICB9CiAgICAKICBmdW5jdGlvbiBnZXRSZXN1bHQobWV0YURhdGEsIHR5cGUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgaWYgKG1ldGFEYXRhICYmIHR5cGUpIHsKICAgICAgbWV0YURhdGEuX2VtYmVkZGVkLm1ldGFEYXRhLmZvckVhY2goKGl0KSA9PiB7CiAgICAgICAgaWYgKGl0LnR5cGUgPT09IHR5cGUpIHsKICAgICAgICAgIHJlc3VsdCA9IGl0OyAKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgICAKICBmdW5jdGlvbiBnZXRNaXRla1Jlc3VsdChtZXRhRGF0YSwgbmFtZSkgewogICAgdmFyIHJlc3VsdCA9IG51bGw7CiAgICB2YXIgbWl0ZWtSZXN1bHRzID0gZ2V0UmVzdWx0KG1ldGFEYXRhLCAnRE9DVU1FTlRfQVVUSEVOVElDQVRJT04nKTsKICAgIGlmIChtaXRla1Jlc3VsdHMgJiYgbmFtZSkgewogICAgICBtaXRla1Jlc3VsdHMuZGF0YS5taXRla1ZlcmlmaWNhdGlvbnMuZm9yRWFjaCgoaXQpID0+IHsKICAgICAgICBpZiAoaXQubmFtZSA9PT0gbmFtZSkgewogICAgICAgICAgcmVzdWx0ID0gaXQ7IAogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoKICAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICAqCiAgICogRXhhbXBsZToKICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICovCiAgZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbiAoYykgewogICAgICB2YXIgciA9IChNYXRoLnJhbmRvbSgpICogMTApIHwgMDsKICAgICAgdmFyIHYgPSByOwogICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKICB9CgogIC8qCiAgICogUmVhZCBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gZ2V0T2JqZWN0QXR0cmlidXRlKG5hbWUpIHsKICAgIHZhciBhdHRyaWJ1dGVzID0gbm9kZVN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpOwogICAgaWYgKGF0dHJpYnV0ZXMpIHsKICAgICAgaWYgKGF0dHJpYnV0ZXMuZ2V0KSB7CiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0KG5hbWUpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm5hbWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLyoKICAgKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7CiAgICB2YXIgYXR0cmlidXRlcyA9IG5vZGVTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgIGlmIChhdHRyaWJ1dGVzICYmIHZhbHVlKSB7CiAgICAgIGF0dHJpYnV0ZXMucHV0KG5hbWUsIHZhbHVlKTsKICAgICAgbm9kZVN0YXRlLnB1dFNoYXJlZCgib2JqZWN0QXR0cmlidXRlcyIsIGF0dHJpYnV0ZXMpOwogICAgfSBlbHNlIGlmICh2YWx1ZSkgewogICAgICBub2RlU3RhdGUucHV0U2hhcmVkKCJvYmplY3RBdHRyaWJ1dGVzIiwgeyBuYW1lOiB2YWx1ZSB9ICk7CiAgICB9CiAgfQp9KCkpOwo=\",\"description\":\"Show selfie authentication results\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Selfie Authentication Results\",\"_id\":\"eaab5b6d-fc11-4365-93da-00eb9121adb9\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogUHJlcGFyZSBBY2NvdW50IFVwZGF0ZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBNb3ZlIGRhdGEgZnJvbSByb290IG9mIG5vZGUgc3RhdGUgaW50byBvYmplY3RBdHRyaWJ1dGVzIGZvciBhY2NvdW50IHVwZGF0ZS4KICogCiAqIFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgbWF5IG5vdCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICovCihmdW5jdGlvbiAoKSB7CiAgb3V0Y29tZSA9ICd0cnVlJzsKCiAgLyogQ29uZmlndXJlIHRvIGZpdCB5b3VyIGVudiAqLwogIHZhciBwMVVzZXJJZEFtQXR0ciA9ICdmci1hdHRyLWlzdHIxJzsgLy8gdGhpcyBpcyB3aGF0IHNob3VsZCBiZSBjb25maWd1cmVkIGluIHlvdXIgdmVyaWZ5IHByb29maW5nIG5vZGUKICB2YXIgcDFVc2VySWRJZG1BdHRyID0gJ2ZySW5kZXhlZFN0cmluZzEnOwogIHZhciBzZWxmaWVTb3VyY2UgPSAnc2VsZmllQmFzZTY0JzsKICB2YXIgc2VsZmllVGFyZ2V0ID0gJ2ZyVW5pbmRleGVkU3RyaW5nMSc7CiAgdmFyIGNyb3BwZWRQb3J0cmFpdFNvdXJjZSA9ICdjcm9wcGVkUG9ydHJhaXRCYXNlNjQnOwogIHZhciBjcm9wcGVkUG9ydHJhaXRUYXJnZXQgPSAnZnJVbmluZGV4ZWRTdHJpbmcyJzsKICB2YXIgbWV0YWRhdGFTb3VyY2UgPSAnVmVyaWZ5TWV0YWRhdGFSZXN1bHQnOwogIHZhciBtZXRhZGF0YVRhcmdldCA9ICdmclVuaW5kZXhlZFN0cmluZzMnOwogIHZhciB2ZXJpZnlTdGF0dXNBdHRyID0gJ2N1c3RvbV92ZXJpZnlTdGF0dXMnOwogIHZhciB2ZXJpZnlGYWlsZWRSZWFzb24gPSAnVmVyaWZlZEZhaWxlZFJlYXNvbic7CgogIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShwMVVzZXJJZElkbUF0dHIsIHNoYXJlZFN0YXRlLmdldChwMVVzZXJJZEFtQXR0cikpCiAgc2V0U2hhcmVkT2JqZWN0QXR0cmlidXRlKHNlbGZpZVRhcmdldCwgc2hhcmVkU3RhdGUuZ2V0KHNlbGZpZVNvdXJjZSkpOwogIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShjcm9wcGVkUG9ydHJhaXRUYXJnZXQsIHNoYXJlZFN0YXRlLmdldChjcm9wcGVkUG9ydHJhaXRTb3VyY2UpKTsKICBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUobWV0YWRhdGFUYXJnZXQsIEpTT04uc3RyaW5naWZ5KHRyYW5zaWVudFN0YXRlLmdldChtZXRhZGF0YVNvdXJjZSkpKTsKICBzZXRTaGFyZWRPYmplY3RBdHRyaWJ1dGUodmVyaWZ5U3RhdHVzQXR0ciwgc2hhcmVkU3RhdGUuZ2V0KHZlcmlmeUZhaWxlZFJlYXNvbikgfHwgJ1N1Y2Nlc3NmdWxseSB2ZXJpZmllZCcpOwogICAgCiAgLy8gcmVtb3ZlIHNvdXJjZSB0byBtaW5pbWl6ZSBBdXRoSWQgc2l6ZQogIHNoYXJlZFN0YXRlLnB1dChzZWxmaWVTb3VyY2UsICcnKTsKICBzaGFyZWRTdGF0ZS5wdXQoY3JvcHBlZFBvcnRyYWl0U291cmNlLCAnJyk7CgogIC8qCiAgICogU3RvcmUgYXR0cmlidXRlcyBpbiBzaGFyZWQgc3RhdGUgZm9yIHVzZSB3aXRoIHRoZSBDcmVhdGUvUGF0Y2ggT2JqZWN0IG5vZGVzLgogICAqLwogIGZ1bmN0aW9uIHNldFNoYXJlZE9iamVjdEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgewogICAgICAgdmFyIHN0b3JhZ2UgPSBzaGFyZWRTdGF0ZS5nZXQoJ29iamVjdEF0dHJpYnV0ZXMnKTsKICAgICAgaWYgKHN0b3JhZ2UgJiYgdmFsdWUpIHsKICAgICAgICAgIGlmIChzdG9yYWdlLnB1dCkgewogICAgICAgICAgICAgICAgc3RvcmFnZS5wdXQobmFtZSwgdmFsdWUpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgc3RvcmFnZVtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgaWYgKHZhbHVlKSB7CiAgICAgICAgICBzaGFyZWRTdGF0ZS5wdXQoJ29iamVjdEF0dHJpYnV0ZXMnLCBKU09OLnBhcnNlKCd7IicrbmFtZSsnIjoiJyt2YWx1ZSsnIn0nKSk7CiAgICAgIH0KICB9Cn0oKSk7Cg==\",\"description\":\"Move data from root of node state into objectAttributes for account update.\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Prepare Account Update\",\"_id\":\"4233c093-76a6-474b-ac38-5c0ea1de2484\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogUmVtb3ZlIEJ1dHRvbgogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBIaWRlIGJ1dHRvbnMgb24gdGhlIGpvdXJuZXkgcGFnZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzY3JpcHQgPSAiQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7ZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnfSkiCiAgICB2YXIgZnIgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuYW0uYXV0aC5ub2RlLmFwaS5BY3Rpb24sCiAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICAgICAgY29tLnN1bi5pZGVudGl0eS5hdXRoZW50aWNhdGlvbi5jYWxsYmFja3MuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrCiAgICApCiAgICB2YXIgbWVzc2FnZSA9ICIgIgogICAgaWYgKGNhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjaygKICAgICAgICAgICAgICAgIGZyLlRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgIG1lc3NhZ2UKICAgICAgICAgICAgKSwKICAgICAgICAgICAgbmV3IGZyLlNjcmlwdFRleHRPdXRwdXRDYWxsYmFjayhzY3JpcHQpCiAgICAgICAgKS5idWlsZCgpCiAgICB9Cn0oKSk7Cg==\",\"description\":\"Remove button from page.\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Remove Button\",\"_id\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"description\":\"Used by endUserUIClient\",\"lastModifiedBy\":\"null\",\"context\":\"OIDC_CLAIMS\",\"lastModifiedDate\":\"0\",\"name\":\"Bravo endUserUIClient OIDC Claims Script\",\"_id\":\"d3ced49b-50cd-4ee9-bd8b-33a46f367fb1\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTktMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqCiAqIFVzZSBvZiB0aGlzIGNvZGUgcmVxdWlyZXMgYSBjb21tZXJjaWFsIHNvZnR3YXJlIGxpY2Vuc2Ugd2l0aCBGb3JnZVJvY2sgQVMKICogb3Igd2l0aCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMuIEFsbCB1c2Ugc2hhbGwgYmUgZXhjbHVzaXZlbHkgc3ViamVjdAogKiB0byBzdWNoIGxpY2Vuc2UgYmV0d2VlbiB0aGUgbGljZW5zZWUgYW5kIEZvcmdlUm9jayBBUy4KICovCgovKgogKiBUaGlzIHNjcmlwdCBsZXRzIHlvdSBtb2RpZnkgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4KICogd2l0aCBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZSBBY2Nlc3NUb2tlbiAoMSkgaW50ZXJmYWNlLgogKiBUaGUgY2hhbmdlcyBtYWRlIHRvIE9BdXRoMiBhY2Nlc3MgdG9rZW5zIHdpbGwgZGlyZWN0bHkgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBDVFMgdG9rZW5zLAogKiBhbmQsIHNpbWlsYXJseSwgdGhlIHNpemUgb2YgdGhlIEpXVHMgaWYgY2xpZW50LWJhc2VkIE9BdXRoMiB0b2tlbnMgYXJlIHV0aWxpemVkLgogKiBXaGVuIGFkZGluZy91cGRhdGluZyBmaWVsZHMgbWFrZSBzdXJlIHRoYXQgdGhlIHRva2VuIHNpemUgcmVtYWlucyB3aXRoaW4gY2xpZW50L3VzZXItYWdlbnQgbGltaXRzLgogKgogKiBEZWZpbmVkIHZhcmlhYmxlczoKICogYWNjZXNzVG9rZW4gLSBBY2Nlc3NUb2tlbiAoMSkuCiAqICAgICAgICAgICAgICAgVGhlIGFjY2VzcyB0b2tlbiB0byBiZSB1cGRhdGVkLgogKiAgICAgICAgICAgICAgIE11dGFibGUgb2JqZWN0LCBhbGwgY2hhbmdlcyB0byB0aGUgYWNjZXNzIHRva2VuIHdpbGwgYmUgcmVmbGVjdGVkLgogKiBzY29wZXMgLSBTZXQ8U3RyaW5nPiAoNikuCiAqICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICogcmVxdWVzdFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgY29udGFpbnMgYSBtYXAgb2YgcmVxdWVzdCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmkgLSBUaGUgcmVxdWVzdCBVUkkuCiAqICAgICAgICAgICAgICAgICAgICAgcmVhbG0gLSBUaGUgcmVhbG0gdGhhdCB0aGUgcmVxdWVzdCByZWxhdGVzIHRvLgogKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMgLSBBIG1hcCBvZiB0aGUgcmVxdWVzdCBwYXJhbXMgYW5kL29yIHBvc3RlZCBkYXRhLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGluIGFjY29yZGFuY2Ugd2l0aCBPV0FTUCBiZXN0IHByYWN0aWNlczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9vd2FzcC5vcmcvd3d3LWNvbW11bml0eS92dWxuZXJhYmlsaXRpZXMvVW5zYWZlX3VzZV9vZl9SZWZsZWN0aW9uLgogKiBjbGllbnRQcm9wZXJ0aWVzIC0gVW5tb2RpZmlhYmxlIE1hcCAoNSkuCiAqICAgICAgICAgICAgICAgICAgICBQcmVzZW50IGlmIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHdhcyBpZGVudGlmaWVkLCBjb250YWlucyBhIG1hcCBvZiBjbGllbnQgcHJvcGVydGllczoKICogICAgICAgICAgICAgICAgICAgIGNsaWVudElkIC0gVGhlIGNsaWVudCdzIFVSSSBmb3IgdGhlIHJlcXVlc3QgbG9jYWxlLgogKiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEdyYW50VHlwZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIGdyYW50IHR5cGVzIChvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLkdyYW50VHlwZSkgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgcmVzcG9uc2UgdHlwZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU2NvcGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCBzY29wZXMgZm9yIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzIC0gQSBtYXAgb2YgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGllbnQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3IgbWFwcyB3aWxsIGJlIGluY2x1ZGVkIGFzIHN1Yi1tYXBzOyBmb3IgZXhhbXBsZToKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21NYXBbS2V5MV09VmFsdWUxIHdpbGwgYmUgcmV0dXJuZWQgYXMgY3VzdG9tTWFwIC0+IEtleTEgLT4gVmFsdWUxLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBjdXN0b20gcHJvcGVydGllcyB0byBhIGNsaWVudCwgdXBkYXRlIHRoZSBDdXN0b20gUHJvcGVydGllcyBmaWVsZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEFNIENvbnNvbGUgPiBSZWFsbSBOYW1lID4gQXBwbGljYXRpb25zID4gT0F1dGggMi4wID4gQ2xpZW50cyA+IENsaWVudCBJRCA+IEFkdmFuY2VkLgogKiBpZGVudGl0eSAtIEFNSWRlbnRpdHkgKDMpLgogKiAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlc291cmNlIG93bmVyLgogKiBzZXNzaW9uIC0gU1NPVG9rZW4gKDQpLgogKiAgICAgICAgICAgUHJlc2VudCBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgc2Vzc2lvbiBjb29raWUsIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBvYmplY3QuCiAqIHNjcmlwdE5hbWUgLSBTdHJpbmcgKHByaW1pdGl2ZSkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0LgogKiBsb2dnZXIgLSBBbHdheXMgcHJlc2VudCwgdGhlICJPQXV0aDJQcm92aWRlciIgZGVidWcgbG9nZ2VyIGluc3RhbmNlOgogKiAgICAgICAgICBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9zY3JpcHRpbmctZ3VpZGUvc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtbG9nZ2VyLgogKiAgICAgICAgICBDb3JyZXNwb25kaW5nIGxvZyBmaWxlcyB3aWxsIGJlIHByZWZpeGVkIHdpdGg6IHNjcmlwdHMuT0FVVEgyX0FDQ0VTU19UT0tFTl9NT0RJRklDQVRJT04uCiAqIGh0dHBDbGllbnQgLSBIVFRQIENsaWVudCAoOCkuCiAqICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIEhUVFAgQ2xpZW50IGluc3RhbmNlOgogKiAgICAgICAgICAgICAgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvc2NyaXB0aW5nLWd1aWRlL3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50Lmh0bWwjc2NyaXB0aW5nLWFwaS1nbG9iYWwtaHR0cC1jbGllbnQuCiAqCiAqIFJldHVybiAtIG5vIHZhbHVlIGlzIGV4cGVjdGVkLCBjaGFuZ2VzIHNoYWxsIGJlIG1hZGUgdG8gdGhlIGFjY2Vzc1Rva2VuIHBhcmFtZXRlciBkaXJlY3RseS4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgQWNjZXNzVG9rZW4gLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvQWNjZXNzVG9rZW4uaHRtbC4KICogKDMpIEFNSWRlbnRpdHkgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL2NvbS9zdW4vaWRlbnRpdHkvaWRtL0FNSWRlbnRpdHkuaHRtbC4KICogKDQpIFNTT1Rva2VuIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vaXBsYW5ldC9zc28vU1NPVG9rZW4uaHRtbC4KICogKDUpIE1hcCAtIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvSGFzaE1hcC5odG1sLAogKiAgICAgICAgICAgb3IgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9MaW5rZWRIYXNoTWFwLmh0bWwuCiAqICg2KSBTZXQgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hTZXQuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgogKi8KCi8qIEVYQU1QTEUKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlcXVlc3QsCiAgICAgICAgb3JnLmZvcmdlcm9jay5odHRwLnByb3RvY29sLlJlc3BvbnNlCiAgICApOwoKICAgIC8vIEFsd2F5cyBpbmNsdWRlcyB0aGlzIGZpZWxkIGluIHRoZSB0b2tlbi4KICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkKCdrZXkxJywgJ3ZhbHVlMScpOwoKICAgIC8vIFJlY2VpdmVzIGFuZCBhZGRzIHRvIHRoZSBhY2Nlc3MgdG9rZW4gYWRkaXRpb25hbCB2YWx1ZXMgYnkgcGVyZm9ybWluZyBhIFJFU1QgY2FsbCB0byBhbiBleHRlcm5hbCBzZXJ2aWNlLgogICAgLy8gV0FSTklORzogQmVsb3csIHlvdSB3aWxsIGZpbmQgYSByZWZlcmVuY2UgdG8gYSB0aGlyZC1wYXJ0eSBzaXRlLCB3aGljaCBpcyBwcm92aWRlZCBvbmx5IGFzIGFuIGV4YW1wbGUuCiAgICB2YXIgdXJpID0gJ2h0dHBzOi8vanNvbnBsYWNlaG9sZGVyLnR5cGljb2RlLmNvbS9wb3N0cyc7CgogICAgdHJ5IHsKICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBmckphdmEuUmVxdWVzdCgpOwoKICAgICAgICAvLyBZb3UgY2FuIGNoYWluIG1ldGhvZHMgdGhhdCByZXR1cm4gdGhlIHJlcXVlc3Qgb2JqZWN0LgogICAgICAgIHJlcXVlc3Quc2V0VXJpKHVyaSkKICAgICAgICAgICAgLnNldE1ldGhvZCgnUE9TVCcpCiAgICAgICAgICAgIC5zZXRFbnRpdHkoSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogewogICAgICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLAogICAgICAgICAgICAgICAgICAgIGtleTM6ICd2YWx1ZTMnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgLy8gWW91IGNhbiBjYWxsIGEgbWV0aG9kIHdoZW4gY2hhaW5pbmcgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLmFkZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsKCiAgICAgICAgLy8gU2VuZHMgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmVzIHRoZSByZXNwb25zZS4KICAgICAgICB2YXIgcmVzcG9uc2UgPSBodHRwQ2xpZW50LnNlbmQocmVxdWVzdCkuZ2V0T3JUaHJvdygpOwoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBpcyBhcyBleHBlY3RlZC4KICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkgPT09IG9yZy5mb3JnZXJvY2suaHR0cC5wcm90b2NvbC5TdGF0dXMuQ1JFQVRFRCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CgogICAgICAgICAgICAvLyBTZXQgbXVsdGlwbGUgdG9rZW4gZmllbGRzIGF0IG9uY2UuCiAgICAgICAgICAgIGFjY2Vzc1Rva2VuLnNldEZpZWxkcyhyZXN1bHQudXBkYXRlZEZpZWxkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gb2J0YWluIGFjY2VzcyB0b2tlbiBtb2RpZmljYXRpb25zLiBTdGF0dXM6ICcgKyByZXNwb25zZS5nZXRTdGF0dXMoKSArICcuIENvbnRlbnQ6ICcgKyByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGxvZ2dlci5lcnJvcignVGhlIHJlcXVlc3QgcHJvY2Vzc2luZyB3YXMgaW50ZXJydXB0ZWQuICcgKyBlKTsKCiAgICAgICAgLy8gVGhlIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxzIHdpdGggdGhlIEhUVFAgNTAwIGVycm9yIGluIHRoaXMgY2FzZS4KICAgICAgICB0aHJvdyAoJ1VuYWJsZSB0byBvYnRhaW4gcmVzcG9uc2UgZnJvbTogJyArIHVyaSk7CiAgICB9CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgaWRlbnRpdHkgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgYWNjZXNzIHRva2VuLgogICAgYWNjZXNzVG9rZW4uc2V0RmllbGQoJ21haWwnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ21haWwnKSk7CiAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgncGhvbmUnLCBpZGVudGl0eS5nZXRBdHRyaWJ1dGUoJ3RlbGVwaG9uZU51bWJlcicpLnRvQXJyYXkoKVswXSk7CgogICAgLy8gQWRkcyBuZXcgZmllbGRzIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gcHJvcGVydHkgdmFsdWVzLgogICAgLy8gTk9URTogc2Vzc2lvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3Igbm9uLWludGVyYWN0aXZlIGF1dGhvcml6YXRpb24gZ3JhbnRzLgogICAgaWYgKHNlc3Npb24pIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBhY2Nlc3NUb2tlbi5zZXRGaWVsZCgnaXBBZGRyZXNzJywgc2Vzc2lvbi5nZXRQcm9wZXJ0eSgnSG9zdCcpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJldHJpZXZlIHNlc3Npb24gcHJvcGVydHkgdmFsdWUuICcgKyBlKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVtb3ZlcyBhIG5hdGl2ZSBmaWVsZCBmcm9tIHRoZSB0b2tlbiBlbnRyeSwgdGhhdCB3YXMgc2V0IGJ5IEFNLgogICAgLy8gV0FSTklORzogcmVtb3ZpbmcgbmF0aXZlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBtYXkgcmVzdWx0IGluIGxvc3Mgb2YgZnVuY3Rpb25hbGl0eS4KICAgIC8vIGFjY2Vzc1Rva2VuLnJlbW92ZVRva2VuTmFtZSgpCgogICAgLy8gTm8gcmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkLiBMZXQgaXQgYmUgdW5kZWZpbmVkLgp9KCkpOwoqLwo=\",\"description\":\"Default bravo realm script for OAuth2 Access Token Modification\",\"lastModifiedBy\":\"null\",\"context\":\"OAUTH2_ACCESS_TOKEN_MODIFICATION\",\"lastModifiedDate\":\"0\",\"name\":\"Bravo OAuth2 Access Token Modification Script\",\"_id\":\"21138ab1-0621-4466-b18f-670bfcbabca7\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"dmFyIGZyID0gSmF2YUltcG9ydGVyKAogIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGksCiAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2sKKTsKCm91dGNvbWUgPSAidHJ1ZSI7Cgp3aXRoIChmcikgewogIGlmIChjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICB2YXIgc2VwZXJhdG9yQ0IgPSBuZXcgVGV4dE91dHB1dENhbGxiYWNrKFRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CiAgICB2YXIgc2hhcmVkU3RhdGVDQiA9IG5ldyBUZXh0T3V0cHV0Q2FsbGJhY2soVGV4dE91dHB1dENhbGxiYWNrLklORk9STUFUSU9OLCAic2hhcmVkU3RhdGU6ICIgKyBzaGFyZWRTdGF0ZS50b1N0cmluZygpKTsKICAgIHZhciB0cmFuc2llbnRTdGF0ZUNCID0gbmV3IFRleHRPdXRwdXRDYWxsYmFjayhUZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sICJ0cmFuc2llbnRTdGF0ZTogIiArIHRyYW5zaWVudFN0YXRlLnRvU3RyaW5nKCkpOwogICAgdmFyIHJlcXVlc3RIZWFkZXJzQ0IgPSBuZXcgVGV4dE91dHB1dENhbGxiYWNrKFRleHRPdXRwdXRDYWxsYmFjay5JTkZPUk1BVElPTiwgInJlcXVlc3RIZWFkZXJzOiAiICsgcmVxdWVzdEhlYWRlcnMudG9TdHJpbmcoKSk7CiAgICB2YXIgdGhlQ2FsbGJhY2tzID0gW3NoYXJlZFN0YXRlQ0IsIHNlcGVyYXRvckNCLCB0cmFuc2llbnRTdGF0ZUNCLCBzZXBlcmF0b3JDQiwgcmVxdWVzdEhlYWRlcnNDQl07CiAgICBhY3Rpb24gPSBBY3Rpb24uc2VuZCh0aGVDYWxsYmFja3MpLmJ1aWxkKCk7CiAgfSBlbHNlIHsKICAgIGFjdGlvbiA9IEFjdGlvbi5nb1RvKCJ0cnVlIikuYnVpbGQoKTsKICB9Cn0K\",\"description\":\"null\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Debug\",\"_id\":\"fa53dc0e-b558-49ab-bc5a-609c0b4d1286\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V2_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogUmVzb2x2ZSBVc2VybmFtZQogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDaGVjayBpZiB1c2VybmFtZSBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkIHRvIF9pZC4KICogUmV0dXJuICJ0cnVlIiBpZiByZXNvbHZlZCwgImZhbHNlIiBvdGhlcndpc2UuCiAqIAogKiBUaGlzIHNjcmlwdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHBhcmFtZXRyaXplZC4gSXQgd2lsbCB3b3JrIHByb3Blcmx5IGFzIGlzLgogKiAKICogVGhlIFNjcmlwdGVkIERlY2lzaW9uIE5vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBvdXRjb21lcyBkZWZpbmVkOgogKiAtIHRydWUKICogLSBmYWxzZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgIGlmIChub2RlU3RhdGUuZ2V0KCJfaWQiKSkgewogICAgICAgIG91dGNvbWUgPSAidHJ1ZSI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBvdXRjb21lID0gImZhbHNlIjsKICAgIH0KfSgpKTsK\",\"description\":\"Check if username has already been resolved to _id.\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Check Resolved Username - imported (1)\",\"_id\":\"870f0298-2f96-4e10-990d-3436fc2f3c43\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyoKICogQ29weXJpZ2h0IDIwMTQtMjAyMSBGb3JnZVJvY2sgQVMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICoKICogVXNlIG9mIHRoaXMgY29kZSByZXF1aXJlcyBhIGNvbW1lcmNpYWwgc29mdHdhcmUgbGljZW5zZSB3aXRoIEZvcmdlUm9jayBBUwogKiBvciB3aXRoIG9uZSBvZiBpdHMgYWZmaWxpYXRlcy4gQWxsIHVzZSBzaGFsbCBiZSBleGNsdXNpdmVseSBzdWJqZWN0CiAqIHRvIHN1Y2ggbGljZW5zZSBiZXR3ZWVuIHRoZSBsaWNlbnNlZSBhbmQgRm9yZ2VSb2NrIEFTLgogKi8KCi8qCiAqIFRoaXMgc2NyaXB0IGNvbXB1dGVzIGNsYWltIHZhbHVlcyByZXR1cm5lZCBpbiBJRCB0b2tlbnMgYW5kL29yIGF0IHRoZSBVc2VySW5mbyBFbmRwb2ludC4KICogVGhlIGNsYWltIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yOgogKiB0aGUgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICogdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIsCiAqIGFuZCB0aGUgY2xhaW1zIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHZpYSB0aGUgY2xhaW1zIHBhcmFtZXRlci4KICoKICogSW4gdGhlIENPTkZJR1VSQVRJT04gQU5EIENVU1RPTUlaQVRJT04gc2VjdGlvbiwgeW91IGNhbgogKiBkZWZpbmUgdGhlIHNjb3BlLXRvLWNsYWltcyBtYXBwaW5nLCBhbmQKICogYXNzaWduIHRvIGVhY2ggY2xhaW0gYSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcHV0ZSB0aGUgY2xhaW0gdmFsdWUuCiAqCiAqIERlZmluZWQgdmFyaWFibGVzIChjbGFzcyByZWZlcmVuY2VzIGFyZSBwcm92aWRlZCBiZWxvdyk6CiAqIHNjb3BlcyAtIFNldDxTdHJpbmc+ICg2KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogKiBjbGFpbXMgLSBNYXA8U3RyaW5nLCBPYmplY3Q+ICg1KS4KICogICAgICAgICAgQWx3YXlzIHByZXNlbnQsIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogY2xhaW1PYmplY3RzIC0gTGlzdDxDbGFpbT4gKDcsIDIpLgogKiAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIGRlZmF1bHQgc2VydmVyIHByb3ZpZGVkIGNsYWltcy4KICogcmVxdWVzdGVkQ2xhaW1zIC0gTWFwPFN0cmluZywgU2V0PFN0cmluZz4+ICg1KS4KICogICAgICAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIG5vdCBlbXB0eSBpZiB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgY2xhaW1zIHBhcmFtZXRlciBhbmQgdGhlIHNlcnZlciBoYXMgZW5hYmxlZAogKiAgICAgICAgICAgICAgICAgICBjbGFpbXNfcGFyYW1ldGVyX3N1cHBvcnRlZC4gQSBtYXAgb2YgdGhlIHJlcXVlc3RlZCBjbGFpbXMgdG8gcG9zc2libGUgdmFsdWVzLCBvdGhlcndpc2UgZW1wdHk7CiAqICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBjbGFpbXMgd2l0aCBubyByZXF1ZXN0ZWQgdmFsdWVzIHdpbGwgaGF2ZSBhIGtleSBidXQgbm8gdmFsdWUgaW4gdGhlIG1hcC4gQSBrZXkgd2l0aAogKiAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSB2YWx1ZSBpbiBpdHMgU2V0ICg2KSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiByZXF1ZXN0ZWRUeXBlZENsYWltcyAtIExpc3Q8Q2xhaW0+ICg3LCAyKS4KICogICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgcHJlc2VudCwgdGhlIHJlcXVlc3RlZCBjbGFpbXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkIGNsYWltcyB3aXRoIG5vIHJlcXVlc3RlZCB2YWx1ZXMgd2lsbCBoYXZlIGEgY2xhaW0gd2l0aCBubyB2YWx1ZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgQSBjbGFpbSB3aXRoIGEgc2luZ2xlIHZhbHVlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLgogKiBjbGFpbXNMb2NhbGVzIC0gTGlzdDxTdHJpbmc+ICg3KS4KICogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgZnJvbSB0aGUgJ2NsYWltc19sb2NhbGVzJyBwYXJhbWV0ZXIuCiAqICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjQ2xhaW1zTGFuZ3VhZ2VzQW5kU2NyaXB0cyBmb3IgdGhlIE9JREMgc3BlY2lmaWNhdGlvbiBkZXRhaWxzLgogKiByZXF1ZXN0UHJvcGVydGllcyAtIFVubW9kaWZpYWJsZSBNYXAgKDUpLgogKiAgICAgICAgICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCBjb250YWlucyBhIG1hcCBvZiByZXF1ZXN0IHByb3BlcnRpZXM6CiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVyaSAtIFRoZSByZXF1ZXN0IFVSSS4KICogICAgICAgICAgICAgICAgICAgICByZWFsbSAtIFRoZSByZWFsbSB0aGF0IHRoZSByZXF1ZXN0IHJlbGF0ZXMgdG8uCiAqICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBhcmFtcyAtIEEgbWFwIG9mIHRoZSByZXF1ZXN0IHBhcmFtcyBhbmQvb3IgcG9zdGVkIGRhdGEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYSBsaXN0IG9mIG9uZSBvciBtb3JlIHByb3BlcnRpZXMuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2Ugc2hvdWxkIGJlIGhhbmRsZWQgaW4gYWNjb3JkYW5jZSB3aXRoIE9XQVNQIGJlc3QgcHJhY3RpY2VzOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL293YXNwLm9yZy93d3ctY29tbXVuaXR5L3Z1bG5lcmFiaWxpdGllcy9VbnNhZmVfdXNlX29mX1JlZmxlY3Rpb24uCiAqIGNsaWVudFByb3BlcnRpZXMgLSBVbm1vZGlmaWFibGUgTWFwICg1KS4KICogICAgICAgICAgICAgICAgICAgIFByZXNlbnQgaWYgdGhlIGNsaWVudCBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3Qgd2FzIGlkZW50aWZpZWQsIGNvbnRhaW5zIGEgbWFwIG9mIGNsaWVudCBwcm9wZXJ0aWVzOgogKiAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQgLSBUaGUgY2xpZW50J3MgVVJJIGZvciB0aGUgcmVxdWVzdCBsb2NhbGUuCiAqICAgICAgICAgICAgICAgICAgICBhbGxvd2VkR3JhbnRUeXBlcyAtIExpc3Qgb2YgdGhlIGFsbG93ZWQgZ3JhbnQgdHlwZXMgKG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuR3JhbnRUeXBlKSBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRSZXNwb25zZVR5cGVzIC0gTGlzdCBvZiB0aGUgYWxsb3dlZCByZXNwb25zZSB0eXBlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGFsbG93ZWRTY29wZXMgLSBMaXN0IG9mIHRoZSBhbGxvd2VkIHNjb3BlcyBmb3IgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMgLSBBIG1hcCBvZiB0aGUgY3VzdG9tIHByb3BlcnRpZXMgb2YgdGhlIGNsaWVudC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBvciBtYXBzIHdpbGwgYmUgaW5jbHVkZWQgYXMgc3ViLW1hcHM7IGZvciBleGFtcGxlOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbU1hcFtLZXkxXT1WYWx1ZTEgd2lsbCBiZSByZXR1cm5lZCBhcyBjdXN0b21NYXAgLT4gS2V5MSAtPiBWYWx1ZTEuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGEgY2xpZW50LCB1cGRhdGUgdGhlIEN1c3RvbSBQcm9wZXJ0aWVzIGZpZWxkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gQU0gQ29uc29sZSA+IFJlYWxtIE5hbWUgPiBBcHBsaWNhdGlvbnMgPiBPQXV0aCAyLjAgPiBDbGllbnRzID4gQ2xpZW50IElEID4gQWR2YW5jZWQuCiAqIGlkZW50aXR5IC0gQU1JZGVudGl0eSAoMykuCiAqICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBpZGVudGl0eSBvZiB0aGUgcmVzb3VyY2Ugb3duZXIuCiAqIHNlc3Npb24gLSBTU09Ub2tlbiAoNCkuCiAqICAgICAgICAgICBQcmVzZW50IGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHRoZSBzZXNzaW9uIGNvb2tpZSwgdGhlIHVzZXIncyBzZXNzaW9uIG9iamVjdC4KICogc2NyaXB0TmFtZSAtIFN0cmluZyAocHJpbWl0aXZlKS4KICogICAgICAgICAgICAgIEFsd2F5cyBwcmVzZW50LCB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAqIGxvZ2dlciAtIEFsd2F5cyBwcmVzZW50LCB0aGUgIk9BdXRoMlByb3ZpZGVyIiBkZWJ1ZyBsb2dnZXIgaW5zdGFuY2U6CiAqICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuaHRtbCNzY3JpcHRpbmctYXBpLWdsb2JhbC1sb2dnZXIuCiAqICAgICAgICAgIENvcnJlc3BvbmRpbmcgZmlsZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoOiBzY3JpcHRzLk9JRENfQ0xBSU1TLgogKiBodHRwQ2xpZW50IC0gSFRUUCBDbGllbnQgKDgpLgogKiAgICAgICAgICAgICAgQWx3YXlzIHByZXNlbnQsIHRoZSBIVFRQIENsaWVudCBpbnN0YW5jZToKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHRpbmctYXBpLWdsb2JhbC1odHRwLWNsaWVudC5odG1sI3NjcmlwdGluZy1hcGktZ2xvYmFsLWh0dHAtY2xpZW50LgogKiAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBjbGllbnQsIHlvdSBtYXkgbmVlZCB0byBhZGQKICogICAgICAgICAgICAgIG9yZy5mb3JnZXJvY2suaHR0cC5DbGllbnQsCiAqICAgICAgICAgICAgICBvcmcuZm9yZ2Vyb2NrLmh0dHAucHJvdG9jb2wuKiwKICogICAgICAgICAgICAgIGFuZCBvcmcuZm9yZ2Vyb2NrLnV0aWwucHJvbWlzZS5Qcm9taXNlSW1wbAogKiAgICAgICAgICAgICAgdG8gdGhlIGFsbG93ZWQgSmF2YSBjbGFzc2VzIGluIHRoZSBzY3JpcHRpbmcgZW5naW5lIGNvbmZpZ3VyYXRpb24sIGFzIGRlc2NyaWJlZCBpbjoKICogICAgICAgICAgICAgIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L3NjcmlwdGluZy1ndWlkZS9zY3JpcHQtZW5naW5lLXNlY3VyaXR5Lmh0bWwKICoKICogUmV0dXJuIC0gYSBuZXcgVXNlckluZm9DbGFpbXMoTWFwPFN0cmluZywgT2JqZWN0PiB2YWx1ZXMsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gY29tcG9zaXRlU2NvcGVzKSAoMSkgb2JqZWN0LgogKiAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBsYXN0IHN0YXRlbWVudCBpbiB0aGUgc2NyaXB0IGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIuCiAqICAgICAgICAgIEN1cnJlbnRseSwgdGhlIEltbWVkaWF0ZWx5IEludm9rZWQgRnVuY3Rpb24gRXhwcmVzc2lvbiAoYWxzbyBrbm93biBhcyBTZWxmLUV4ZWN1dGluZyBBbm9ueW1vdXMgRnVuY3Rpb24pCiAqICAgICAgICAgIGlzIHRoZSBsYXN0IChhbmQgb25seSkgc3RhdGVtZW50IGluIHRoaXMgc2NyaXB0LCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlY29tZSB0aGUgc2NyaXB0IHJlc3VsdC4KICogICAgICAgICAgRG8gbm90IHVzZSAicmV0dXJuIHZhcmlhYmxlIiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24uCiAqICAgICAgICAgIFNlZSBSRVNVTFRTIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KICoKICogQ2xhc3MgcmVmZXJlbmNlOgogKiAoMSkgVXNlckluZm9DbGFpbXMgLSBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb2F1dGgyL2NvcmUvVXNlckluZm9DbGFpbXMuaHRtbC4KICogKDIpIENsYWltIC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbCkuCiAqICAgICAgICAgQW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGhhcyBtZXRob2RzIHRvIGFjY2VzcwogKiAgICAgICAgIHRoZSBjbGFpbSBuYW1lLCByZXF1ZXN0ZWQgdmFsdWVzLCBsb2NhbGUsIGFuZCB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwuCiAqICgzKSBBTUlkZW50aXR5IC0gaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9jb20vc3VuL2lkZW50aXR5L2lkbS9BTUlkZW50aXR5Lmh0bWwuCiAqICg0KSBTU09Ub2tlbiAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3MvY29tL2lwbGFuZXQvc3NvL1NTT1Rva2VuLmh0bWwuCiAqICg1KSBNYXAgLSBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMS9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS91dGlsL0hhc2hNYXAuaHRtbCwKICogICAgICAgICAgIG9yIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzExL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL3V0aWwvTGlua2VkSGFzaE1hcC5odG1sLgogKiAoNikgU2V0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9IYXNoU2V0Lmh0bWwuCiAqICg3KSBMaXN0IC0gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTEvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvdXRpbC9BcnJheUxpc3QuaHRtbC4KICogKDgpIENsaWVudCAtIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9odHRwL0NsaWVudC5odG1sLgoqLwoKKGZ1bmN0aW9uICgpIHsKICAgIC8vIFNFVFVQCgogICAgLyoqCiAgICAgKiBDbGFpbSBwcm9jZXNzaW5nIHV0aWxpdGllcy4KICAgICAqIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHJldXNhYmxlIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBjbGFpbXMuCiAgICAgKiBAc2VlIENMQUlNIFBST0NFU1NJTkcgVVRJTElUSUVTIHNlY3Rpb24gZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHZhciB1dGlscyA9IGdldFV0aWxzKCk7CgogICAgLy8gQ09ORklHVVJBVElPTiBBTkQgQ1VTVE9NSVpBVElPTgoKICAgIC8qKgogICAgICogT0F1dGggMi4wIHNjb3BlIHZhbHVlcyAoc2NvcGVzKSBjYW4gYmUgdXNlZCBieSB0aGUgQ2xpZW50IHRvIHJlcXVlc3QgT0lEQyBjbGFpbXMuCiAgICAgKgogICAgICogQ2FsbCB0aGlzIGNvbmZpZ3VyYXRpb24gbWV0aG9kLCBhbmQgcGFzcyBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAqIGFuIG9iamVjdCB0aGF0IG1hcHMgYSBzY29wZSB2YWx1ZSB0byBhbiBhcnJheSBvZiBjbGFpbSBuYW1lcwogICAgICogdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgYW5kIHJldHVybmVkIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfQogICAgICogZm9yIHRoZSBzY29wZSB2YWx1ZXMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlcXVlc3QgY2xhaW1zIGFzIGRlZmluZWQgaW4gdGhlIE9JREMgc3BlY2lmaWNhdGlvbi4KICAgICAqCiAgICAgKiBCZWxvdywgZmluZCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiBjaG9vc2UgdGhlIGNsYWltIG5hbWVzIHJldHVybmVkIGZvciBhIHNjb3BlLgogICAgICovCiAgICB1dGlscy5zZXRTY29wZUNsYWltc01hcCh7CiAgICAgICAgcHJvZmlsZTogWwogICAgICAgICAgICAnbmFtZScsCiAgICAgICAgICAgICdmYW1pbHlfbmFtZScsCiAgICAgICAgICAgICdnaXZlbl9uYW1lJywKICAgICAgICAgICAgJ3pvbmVpbmZvJywKICAgICAgICAgICAgJ2xvY2FsZScKICAgICAgICBdLAogICAgICAgIGVtYWlsOiBbJ2VtYWlsJ10sCiAgICAgICAgYWRkcmVzczogWydhZGRyZXNzJ10sCiAgICAgICAgcGhvbmU6IFsncGhvbmVfbnVtYmVyJ10KICAgIH0pOwoKICAgIC8qKgogICAgICogSW4gdGhpcyBzY3JpcHQsIGVhY2ggY2xhaW0KICAgICAqIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3BlcywKICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciwgYW5kCiAgICAgKiByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCB2aWEgdGhlIGNsYWltcyBwYXJhbWV0ZXIKICAgICAqIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGFpbSBuYW1lLgogICAgICoKICAgICAqIENhbGwgdGhpcyBjb25maWd1cmF0aW9uIG1ldGhvZCwgYW5kIHBhc3MgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIGEgY2xhaW0gbmFtZSB0byBhIHJlc29sdmVyIGZ1bmN0aW9uLAogICAgICogd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGZvciBlYWNoIGNsYWltIHByb2Nlc3NlZCBieSB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIFRoZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIHJlcXVlc3RlZCBjbGFpbSBpbmZvcm1hdGlvbgogICAgICogaW4gYW4gaW5zdGFuY2Ugb2Ygb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9CiAgICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgQ2xhaW0gY2xhc3MuCiAgICAgKgogICAgICogSWYgdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSwKICAgICAqIG90aGVyIHRoYW4gdW5kZWZpbmVkIG9yIG51bGwsCiAgICAgKiB0aGUgY2xhaW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2NyaXB0J3MgcmVzdWx0cy4KICAgICAqCiAgICAgKiBUaGUgQ2xhaW0gaW5zdGFuY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBjaGVjawogICAgICogd2hhdCB0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaXMsCiAgICAgKiB3aGljaCB2YWx1ZXMgdGhlIGNsYWltIHJlcXVlc3QgY29udGFpbnMsCiAgICAgKiB3aGV0aGVyIHRoZSBjbGFpbSBpcyBlc3NlbnRpYWwsIGFuZAogICAgICogd2hpY2ggbG9jYWxlIHRoZSBjbGFpbSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgKiBUaGUgcmVzb2x2ZXIgZnVuY3Rpb24gY2FuIGNvbnNpZGVyIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBjb21wdXRpbmcgYW5kIHJldHVybmluZyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgKgogICAgICogQmVsb3csIGZpbmQgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICogQSByZXVzYWJsZSBmdW5jdGlvbiwgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKFN0cmluZyBhdHRyaWJ1dGUtbmFtZSksCiAgICAgKiBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICogQHNlZSBDTEFJTSBSRVNPTFZFUlMgc2VjdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGV4YW1wbGVzLgogICAgICogRm9yIHRoZSBhZGRyZXNzIGNsYWltLCBhbiBleGFtcGxlIG9mIGEgY2xhaW0gcmVzb2x2ZXIgdGhhdCB1c2VzIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIgaXMgcHJvdmlkZWQuCiAgICAgKgogICAgICogQ1VTVE9NSVpBVElPTgogICAgICogWW91IGNhbiByZXVzZSB0aGUgcHJlZGVmaW5lZCB1dGlscyBtZXRob2RzIHdpdGggeW91ciBjdXN0b20gYXJndW1lbnRzLgogICAgICogWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIGEgY2xhaW0gbmFtZSwKICAgICAqIHRoYXQgd2lsbCBjb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsYWltIHZhbHVl4oCUYXMgc2hvd24gaW4gdGhlIGNvbW1lbnRlZCBvdXQgZXhhbXBsZSBiZWxvdy4KICAgICAqLwogICAgdXRpbHMuc2V0Q2xhaW1SZXNvbHZlcnMoewogICAgICAgIC8qCiAgICAgICAgLy8gQW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGlzIGRlZmluZWQgZm9yIGEgY2xhaW0KICAgICAgICAvLyBkaXJlY3RseSBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Q6CiAgICAgICAgY3VzdG9tLWNsYWltLW5hbWU6IGZ1bmN0aW9uIChyZXF1ZXN0ZWRDbGFpbSkgewogICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGluaXRpYWxseSwgdGhlIGNsYWltIHZhbHVlIGNvbWVzIHN0cmFpZ2h0IGZyb20gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlOgogICAgICAgICAgICB2YXIgY2xhaW1WYWx1ZSA9IGlkZW50aXR5LmdldEF0dHJpYnV0ZSgnY3VzdG9tLWF0dHJpYnV0ZS1uYW1lJykudG9BcnJheSgpWzBdCgogICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBwcm92aWRlIGFkZGl0aW9uYWwgbG9naWMgZm9yIHByb2Nlc3NpbmcgKGZpbHRlcmluZywgZm9ybWF0dGluZywgZXRjLikgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAgICAvLyBZb3UgY2FuIHVzZToKICAgICAgICAgICAgLy8gcmVxdWVzdGVkQ2xhaW0uZ2V0TmFtZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldFZhbHVlcygpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmdldExvY2FsZSgpCiAgICAgICAgICAgIC8vIHJlcXVlc3RlZENsYWltLmlzRXNzZW50aWFsKCkKCiAgICAgICAgICAgIHJldHVybiBjbGFpbVZhbHVlCiAgICAgICAgfSwKICAgICAgICAqLwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB1c2Ugb2YgdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIHNob3dzIGhvdwogICAgICAgICAqIGFuIGFyZ3VtZW50IHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNsYWltIHJlc29sdmVyCiAgICAgICAgICogYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uICh2aWEgaXRzIGxleGljYWwgY29udGV4dCkuCiAgICAgICAgICovCiAgICAgICAgbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdjbicpLAogICAgICAgIGZhbWlseV9uYW1lOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3NuJyksCiAgICAgICAgZ2l2ZW5fbmFtZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdnaXZlbm5hbWUnKSwKICAgICAgICB6b25laW5mbzogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWR0aW1lem9uZScpLAogICAgICAgIGxvY2FsZTogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdwcmVmZXJyZWRsb2NhbGUnKSwKICAgICAgICBlbWFpbDogdXRpbHMuZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyKCdtYWlsJyksCiAgICAgICAgYWRkcmVzczogdXRpbHMuZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXIoCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBUaGUgcGFzc2VkIGluIHVzZXIgcHJvZmlsZSBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiBjYW4gYmUgdXNlZCBieSB0aGUgYWRkcmVzcyBjbGFpbSByZXNvbHZlciBmdW5jdGlvbgogICAgICAgICAgICAgKiB0byBvYnRhaW4gdGhlIGNsYWltIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBhcyBwZXIgdGhlIE9JREMgc3BlY2lmaWNhdGlvbjoKICAgICAgICAgICAgICogQHNlZSBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNBZGRyZXNzQ2xhaW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3Bvc3RhbGFkZHJlc3MnKQogICAgICAgICksCiAgICAgICAgcGhvbmVfbnVtYmVyOiB1dGlscy5nZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXIoJ3RlbGVwaG9uZW51bWJlcicpCiAgICB9KTsKCiAgICAvLyBDTEFJTSBQUk9DRVNTSU5HIFVUSUxJVElFUwoKICAgIC8qKgogICAgICogQHJldHVybnMge29iamVjdH0gQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgcmV1c2FibGUgY2xhaW0gcHJvY2Vzc2luZyB1dGlsaXRpZXMuCiAgICAgKiBAc2VlIFBVQkxJQyBNRVRIT0RTIHNlY3Rpb24gYW5kIHRoZSByZXR1cm4gc3RhdGVtZW50IGZvciB0aGUgbGlzdCBvZiBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFV0aWxzICgpIHsKICAgICAgICAvLyBJTVBPUlQgSkFWQQoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBKYXZhIHNjcmlwdGluZyBmdW5jdGlvbmFsaXR5LgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9SaGluby9TY3JpcHRpbmdfSmF2YSNqYXZhaW1wb3J0ZXJfY29uc3RydWN0b3J9LgogICAgICAgICAqLwogICAgICAgIHZhciBmckphdmEgPSBKYXZhSW1wb3J0ZXIoCiAgICAgICAgICAgIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiwKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltcywKICAgICAgICAgICAgb3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltLAoKICAgICAgICAgICAgamF2YS51dGlsLkxpbmtlZEhhc2hNYXAsCiAgICAgICAgICAgIGphdmEudXRpbC5BcnJheUxpc3QKICAgICAgICApOwoKICAgICAgICAvLyBTRVQgVVAgQ09ORklHVVJBVElPTgoKICAgICAgICAvKioKICAgICAgICAgKiBQbGFjZWhvbGRlciBmb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRhaW5zCiAgICAgICAgICogYW4gb2JqZWN0IHRoYXQgbWFwcyB0aGUgc3VwcG9ydGVkIHNjb3BlIHZhbHVlcyAoc2NvcGVzKQogICAgICAgICAqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjbGFpbSBuYW1lcyBmb3IgZWFjaCBzY29wZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICB2YXIgc2NvcGVDbGFpbXNNYXA7CgogICAgICAgIC8qKgogICAgICAgICAqIFBsYWNlaG9sZGVyIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udGFpbnMKICAgICAgICAgKiBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLgogICAgICAgICAqLwogICAgICAgIHZhciBjbGFpbVJlc29sdmVyczsKCiAgICAgICAgLyoqCiAgICAgICAgICogQSAocHVibGljKSBtZXRob2QgdGhhdCBhY2NlcHRzIGFuIG9iamVjdCB0aGF0IG1hcHMgdGhlIHN1cHBvcnRlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgZWFjaCBzdXBwb3J0ZWQgc2NvcGUgdmFsdWUgdG8gYW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMsCiAgICAgICAgICogaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGljaCBjbGFpbXMgbmVlZCB0byBiZSBwcm9jZXNzZWQgZm9yIHRoZSByZXF1ZXN0ZWQgc2NvcGVzLgogICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Njb3BlQ2xhaW1zfSBmb3IgZGV0YWlscy4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLnByb2ZpbGVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb2ZpbGUgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMuZW1haWxdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGVtYWlsIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbcGFyYW1zLmFkZHJlc3NdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIGFkZHJlc3Mgc2NvcGUgaXMgcmVxdWVzdGVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtwYXJhbXMucGhvbmVdIC0gQW4gYXJyYXkgb2YgY2xhaW0gbmFtZXMgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHBob25lIHNjb3BlIGlzIHJlcXVlc3RlZC4KICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHNldFNjb3BlQ2xhaW1zTWFwKHBhcmFtcykgewogICAgICAgICAgICBzY29wZUNsYWltc01hcCA9IHBhcmFtczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEEgKHB1YmxpYykgbWV0aG9kIHRoYXQgYWNjZXB0cyBhbiBvYmplY3QgdGhhdCBtYXBzIHRoZSBzdXBwb3J0ZWQgY2xhaW0gbmFtZXMKICAgICAgICAgKiBhbmQgdGhlIHJlc29sdmVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdGhlIGNsYWltIHZhbHVlLAogICAgICAgICAqIGFuZCBhc3NpZ25zIGl0IHRvIGEgKHByaXZhdGUpIHZhcmlhYmxlIHRoYXQgc2VydmVzIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uCiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyAtIEFuIG9iamVjdCB0aGF0IG1hcHMKICAgICAgICAgKiBlYWNoIHN1cHBvcnRlZCBjbGFpbSBuYW1lIHRvIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2V0Q2xhaW1SZXNvbHZlcnMocGFyYW1zKSB7CiAgICAgICAgICAgIGNsYWltUmVzb2x2ZXJzID0gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgLy8gQ0xBSU0gUkVTT0xWRVJTCgogICAgICAgIC8qKgogICAgICAgICAqIENsYWltIHJlc29sdmVycyBhcmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHBhcmFtIHsqfQogICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lIC0gTmFtZSBvZiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGRldGVybWluZSB0aGUgY2xhaW0gdmFsdWUKICAgICAgICAgKiBiYXNlZCBvbiB0aGUgdXNlciBwcm9maWxlIGF0dHJpYnV0ZSBhbmQgdGhlIChyZXF1ZXN0ZWQpIGNsYWltIHByb3BlcnRpZXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlclByb2ZpbGVDbGFpbVJlc29sdmVyIChhdHRyaWJ1dGVOYW1lKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXNvbHZlcyBhIGNsYWltIHdpdGggYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAgICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaWRlbnRpdHkgYXR0cmlidXRlIGlzIG5vdCBwb3B1bGF0ZWQsCiAgICAgICAgICAgICAqIE9SIGlmIHRoZSBjbGFpbSBoYXMgcmVxdWVzdGVkIHZhbHVlcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBpZGVudGl0eSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgICAgICAgICAqIEFUVEVOVElPTjogdGhlIGFmb3JlbWVudGlvbmVkIGNvbXBhcmlzb24gaXMgY2FzZS1zZW5zaXRpdmUuCiAgICAgICAgICAgICAqIEBwYXJhbSB7b3JnLmZvcmdlcm9jay5vcGVuaWRjb25uZWN0LkNsYWltfSBjbGFpbQogICAgICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciBkZXRhaWxzLgogICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfEhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNsYWltKGNsYWltKSB7CiAgICAgICAgICAgICAgICB2YXIgdXNlclByb2ZpbGVWYWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyUHJvZmlsZVZhbHVlID0gZ2V0Q2xhaW1WYWx1ZUZyb21TZXQoY2xhaW0sIGlkZW50aXR5LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSk7CgogICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUHJvZmlsZVZhbHVlICYmICF1c2VyUHJvZmlsZVZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYWltLmdldFZhbHVlcygpIHx8IGNsYWltLmdldFZhbHVlcygpLmlzRW1wdHkoKSB8fCBjbGFpbS5nZXRWYWx1ZXMoKS5jb250YWlucyh1c2VyUHJvZmlsZVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJQcm9maWxlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGFkZHJlc3MgY2xhaW0gcmVzb2x2ZXIgYmFzZWQgb24gYSBjbGFpbSB2YWx1ZSBvYnRhaW5lZCB3aXRoIGFub3RoZXIgY2xhaW0gcmVzb2x2ZXIuCiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZUNsYWltIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGFjY2VwdCBhIGNsYWltIGFzIGFuIGFyZ3VtZW50LAogICAgICAgICAqIHJ1biB0aGUgY2xhaW0gcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIHRoZSBjbGFpbSBhbmQgb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwKICAgICAgICAgKiBhbmQgYXBwbHkgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvIHRoZSB2YWx1ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NDbGFpbVJlc29sdmVyIChyZXNvbHZlQ2xhaW0pIHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENyZWF0ZXMgYW4gYWRkcmVzcyBjbGFpbSBvYmplY3QgZnJvbSBhIHZhbHVlIHJldHVybmVkIGJ5IGEgY2xhaW0gcmVzb2x2ZXIsCiAgICAgICAgICAgICAqIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIGNsYWltIG9iamVjdCBhcyB0aGUgY2xhaW0gdmFsdWUuCiAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0FkZHJlc3NDbGFpbX0uCiAgICAgICAgICAgICAqIFRoZSBjbGFpbSB2YWx1ZSBpcyBvYnRhaW5lZCB3aXRoIGEgY2xhaW0gcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBjbG9zdXJlLgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfHVuZGVmaW5lZH0gVGhlIGFkZHJlc3MgY2xhaW0gb2JqZWN0IGNyZWF0ZWQgZnJvbSBhIGNsYWltIHZhbHVlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUFkZHJlc3NDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3NPYmplY3Q7CgogICAgICAgICAgICAgICAgaWYgKGlzQ2xhaW1WYWx1ZVZhbGlkKGNsYWltVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc09iamVjdCA9IG5ldyBmckphdmEuTGlua2VkSGFzaE1hcCgpOwoKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzT2JqZWN0LnB1dCgnZm9ybWF0dGVkJywgY2xhaW1WYWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRyZXNzT2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZUFkZHJlc3NDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXNzZW50aWFsIGNsYWltIHJlc29sdmVyIGJhc2VkIG9uIGEgY2xhaW0gdmFsdWUgb2J0YWluZWQgd2l0aCBhbm90aGVyIGNsYWltIHJlc29sdmVyLgogICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVDbGFpbSAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgY2xhaW0gdmFsdWUuCiAgICAgICAgICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBhY2NlcHQgYSBjbGFpbSBhcyBhbiBhcmd1bWVudCwKICAgICAgICAgKiBydW4gdGhlIGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uIGZvciB0aGUgY2xhaW0gYW5kIG9idGFpbiB0aGUgY2xhaW0gdmFsdWUsCiAgICAgICAgICogYW5kIGFwcGx5IGFkZGl0aW9uYWwgbG9naWMgZm9yIGVzc2VudGlhbCBjbGFpbXMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0RXNzZW50aWFsQ2xhaW1SZXNvbHZlciAocmVzb2x2ZUNsYWltKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBSZXR1cm5zIGEgY2xhaW0gdmFsdWUgb3IgdGhyb3dzIGFuIGVycm9yLgogICAgICAgICAgICAgKiBUaGUgY2xhaW0gdmFsdWUgaXMgb2J0YWluZWQgd2l0aCBhIGNsYWltIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgY2xvc3VyZS4KICAgICAgICAgICAgICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2xhaW0gaXMgZXNzZW50aWFsIGFuZCBubyB2YWx1ZSBpcyByZXR1cm5lZCBmb3IgdGhlIGNsYWltLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBVc2Ugb2YgdGhpcyByZXNvbHZlciBpcyBvcHRpb25hbC4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjSW5kaXZpZHVhbENsYWltc1JlcXVlc3RzfSBzdGF0aW5nOgogICAgICAgICAgICAgKiAiTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIENsYWltcyBhcmUgbm90IGF2YWlsYWJsZSBiZWNhdXNlIHRoZSBFbmQtVXNlciBkaWQgbm90IGF1dGhvcml6ZSB0aGVpciByZWxlYXNlIG9yIHRoZXkgYXJlIG5vdCBwcmVzZW50LAogICAgICAgICAgICAgKiB0aGUgQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTVVTVCBOT1QgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiBDbGFpbXMgYXJlIG5vdCByZXR1cm5lZCwgd2hldGhlciB0aGV5IGFyZSBFc3NlbnRpYWwgb3IgVm9sdW50YXJ5LAogICAgICAgICAgICAgKiB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmljIGNsYWltLiIKICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtvcmcuZm9yZ2Vyb2NrLm9wZW5pZGNvbm5lY3QuQ2xhaW19IGNsYWltCiAgICAgICAgICAgICAqIEFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gb2J0YWluIGluZm9ybWF0aW9uL3JlcXVpcmVtZW50cyBhc3NvY2lhdGVkIHdpdGggYSBjbGFpbS4KICAgICAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICAgICAqIEByZXR1cm5zIHsqfQogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlRXNzZW50aWFsQ2xhaW0oY2xhaW0pIHsKICAgICAgICAgICAgICAgIHZhciBjbGFpbVZhbHVlID0gcmVzb2x2ZUNsYWltKGNsYWltKTsKCiAgICAgICAgICAgICAgICBpZiAoY2xhaW0uaXNFc3NlbnRpYWwoKSAmJiAhaXNDbGFpbVZhbHVlVmFsaWQoY2xhaW1WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZnJKYXZhLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uKCdDb3VsZCBub3QgcHJvdmlkZSB2YWx1ZSBmb3IgZXNzZW50aWFsIGNsYWltOiAnICsgY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1WYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVFc3NlbnRpYWxDbGFpbTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGRlZmF1bHQgcmVzb2x1dGlvbiBmb3IgYSBjbGFpbS4KICAgICAgICAgKiBVc2UgaXQgaWYgYSBjbGFpbS1zcGVjaWZpYyByZXNvbHZlciBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHJldHVybnMgeyp9IEEgc2luZ2xlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNsYWltLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbnlDbGFpbSAoY2xhaW0pIHsKICAgICAgICAgICAgaWYgKGNsYWltLmdldFZhbHVlcygpLnNpemUoKSA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltLmdldFZhbHVlcygpLnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVVRJTElUSUVTCgogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgY2xhaW0gdmFsdWUgZnJvbSBhIHNldC4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5zIHRoZSB2YWx1ZS4KICAgICAgICAgKiBJZiB0aGUgc2V0IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgcmV0dXJucyB0aGUgc2V0LgogICAgICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgKiBBbiBvYmplY3QgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIG9idGFpbiBpbmZvcm1hdGlvbi9yZXF1aXJlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgY2xhaW0uCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29wZW5pZGNvbm5lY3QvQ2xhaW0uaHRtbH0gZm9yIGRldGFpbHMuCiAgICAgICAgICogQHBhcmFtIHtqYXZhLnV0aWwuSGFzaFNldH0gc2V0IFRoZSBzZXTigJRmb3IgZXhhbXBsZSwgYSB1c2VyIHByb2ZpbGUgYXR0cmlidXRlIHZhbHVlLgogICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd8amF2YS51dGlsLkhhc2hTZXR8dW5kZWZpbmVkfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldENsYWltVmFsdWVGcm9tU2V0IChjbGFpbSwgc2V0KSB7CiAgICAgICAgICAgIGlmIChzZXQgJiYgc2V0LnNpemUoKSkgewogICAgICAgICAgICAgICAgaWYgKHNldC5zaXplKCkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0LnRvQXJyYXkoKVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIud2FybmluZ0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ09JREMgQ2xhaW1zIHNjcmlwdC4gR290IGFuIGVtcHR5IHNldCBmb3IgY2xhaW06ICcgKyBjbGFpbS5nZXROYW1lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc0NsYWltVmFsdWVWYWxpZCAoY2xhaW1WYWx1ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIGNsYWltVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGNsYWltVmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBDTEFJTSBQUk9DRVNTSU5HCgogICAgICAgIC8qKgogICAgICAgICAqIENvbnN0cnVjdHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMKICAgICAgICAgKiBhbmQgdGhlIHJlcXVlc3RlZCBzY29wZXMgbWFwcGVkIHRvIHRoZSBjbGFpbSBuYW1lcy4KICAgICAgICAgKiBAcmV0dXJucyB7b3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5Vc2VySW5mb0NsYWltc30gVGhlIG9iamVjdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYXV0aG9yaXphdGlvbiBzZXJ2ZXIuCiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICAgICAqIEBzZWUgUkVTVUxUUyBzZWN0aW9uIGZvciB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0VXNlckluZm9DbGFpbXMgKCkgewogICAgICAgICAgICByZXR1cm4gbmV3IGZySmF2YS5Vc2VySW5mb0NsYWltcyhnZXRDb21wdXRlZENsYWltcygpLCBnZXRDb21wb3NpdGVTY29wZXMoKSk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIChyZXF1ZXN0ZWQpIGNsYWltIG5hbWVzIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMuCiAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5MaW5rZWRIYXNoTWFwfQogICAgICAgICAqIEEgbWFwIG9mIHRoZSByZXF1ZXN0ZWQgY2xhaW0gbmFtZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wdXRlZENsYWltcyAoKSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29tcGxldGUgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZyb206CiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBzY29wZXMsCiAgICAgICAgICAgICAqIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcml6YXRpb24gc2VydmVyLAogICAgICAgICAgICAgKiBhbmQgdGhlIGNsYWltcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICogQHJldHVybnMge2phdmEudXRpbC5BcnJheUxpc3R9CiAgICAgICAgICAgICAqIFJldHVybnMgYSBjb21wbGV0ZSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGF2YWlsYWJsZSB0byB0aGUgc2NyaXB0LgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgdGhlIGNsYWltIG9iamVjdCBkZXRhaWxzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q2xhaW1zKCkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBjbGFpbSBvYmplY3RzIGZvciB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIFVzZXMgdGhlIHNjb3BlQ2xhaW1zTWFwIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGRlcml2ZSB0aGUgY2xhaW0gbmFtZXM7CiAgICAgICAgICAgICAgICAgKiBubyBvdGhlciBwcm9wZXJ0aWVzIG9mIGEgY2xhaW0gZGVyaXZlZCBmcm9tIGEgc2NvcGUgYXJlIHBvcHVsYXRlZC4KICAgICAgICAgICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuQXJyYXlMaXN0fQogICAgICAgICAgICAgICAgICogQSBsaXN0IG9mIG9yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbSBvYmplY3RzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdGVkIHNjb3Blcy4KICAgICAgICAgICAgICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYmFja3N0YWdlLmZvcmdlcm9jay5jb20vZG9jcy9hbS83L2FwaWRvY3Mvb3JnL2Zvcmdlcm9jay9vcGVuaWRjb25uZWN0L0NsYWltLmh0bWx9IGZvciB0aGUgY2xhaW0gb2JqZWN0IGRldGFpbHMuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRTY29wZVRvQ2xhaW1zKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoc2NvcGUpICE9PSAnb3BlbmlkJyAmJiBzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zTWFwW3Njb3BlXS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFpbXMuYWRkKG5ldyBmckphdmEuQ2xhaW0oY2xhaW1OYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBjbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGNsYWltcy5hZGRBbGwoY29udmVydFNjb3BlVG9DbGFpbXMoKSk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKGNsYWltT2JqZWN0cyk7CiAgICAgICAgICAgICAgICBjbGFpbXMuYWRkQWxsKHJlcXVlc3RlZFR5cGVkQ2xhaW1zKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgYSBjbGFpbSB2YWx1ZS4KICAgICAgICAgICAgICogVG8gb2J0YWluIHRoZSBjbGFpbSB2YWx1ZSwgdXNlcyB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24gc3BlY2lmaWVkIGZvciB0aGUgY2xhaW0gaW4gdGhlIGNsYWltUmVzb2x2ZXJzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICAgICAgICAgICAgKiBAc2VlIGNsYWltUmVzb2x2ZXJzCiAgICAgICAgICAgICAqIElmIG5vIHJlc29sdmVyIGZ1bmN0aW9uIGlzIGZvdW5kLCB1c2VzIHRoZSBkZWZhdWx0IGNsYWltIHJlc29sdmVyIGZ1bmN0aW9uLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge29yZy5mb3JnZXJvY2sub3BlbmlkY29ubmVjdC5DbGFpbX0gY2xhaW0KICAgICAgICAgICAgICogQW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBvYnRhaW4gaW5mb3JtYXRpb24vcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhIGNsYWltLgogICAgICAgICAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2JhY2tzdGFnZS5mb3JnZXJvY2suY29tL2RvY3MvYW0vNy9hcGlkb2NzL29yZy9mb3JnZXJvY2svb3BlbmlkY29ubmVjdC9DbGFpbS5odG1sfSBmb3IgZGV0YWlscy4KICAgICAgICAgICAgICogQHJldHVybnMgeyp9IENsYWltIHZhbHVlLgogICAgICAgICAgICAgKiBAdGhyb3dzIHtvcmcuZm9yZ2Vyb2NrLm9hdXRoMi5jb3JlLmV4Y2VwdGlvbnMuSW52YWxpZFJlcXVlc3RFeGNlcHRpb259CiAgICAgICAgICAgICAqIFJldGhyb3dzIHRoaXMgZXhjZXB0aW9uIGlmIGEgY2xhaW0gcmVzb2x2ZXIgdGhyb3dzIGl0LgogICAgICAgICAgICAgKiBZb3UgY2FuIHRocm93IG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuZXhjZXB0aW9ucy5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiBmcm9tIHlvdXIgY3VzdG9tIGNsYWltIHJlc29sdmVyCiAgICAgICAgICAgICAqIGlmIHlvdSB3YW50IHRvIHRlcm1pbmF0ZSB0aGUgY2xhaW0gcHJvY2Vzc2luZy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVDbGFpbShjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc29sdmVDbGFpbTsKICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYWltID0gY2xhaW1SZXNvbHZlcnNbY2xhaW0uZ2V0TmFtZSgpXSB8fCByZXNvbHZlQW55Q2xhaW07CgogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlQ2xhaW0oY2xhaW0pOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnT0lEQyBDbGFpbXMgc2NyaXB0IGV4Y2VwdGlvbi4gVW5hYmxlIHRvIHJlc29sdmUgT0lEQyBDbGFpbS4gJyArIGU7CgogICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcoZSkuaW5kZXhPZignb3JnLmZvcmdlcm9jay5vYXV0aDIuY29yZS5leGNlcHRpb25zLkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLndhcm5pbmdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcobWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tcHV0ZWRDbGFpbXMgPSBuZXcgZnJKYXZhLkxpbmtlZEhhc2hNYXAoKTsKCiAgICAgICAgICAgIGdldENsYWltcygpLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFpbSkgewogICAgICAgICAgICAgICAgdmFyIGNsYWltVmFsdWUgPSBjb21wdXRlQ2xhaW0oY2xhaW0pOwoKICAgICAgICAgICAgICAgIGlmIChpc0NsYWltVmFsdWVWYWxpZChjbGFpbVZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQ2xhaW1zLnB1dChjbGFpbS5nZXROYW1lKCksIGNsYWltVmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBJZiBhIGNsYWltIGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IGFwcGVhcnMgaW4gdGhlIGxpc3QgYWdhaW4sCiAgICAgICAgICAgICAgICAgICAgICogYW5kIGl0cyB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQgdW5kZXIgdGhlIG5ldyBjb25kaXRpb25zLAogICAgICAgICAgICAgICAgICAgICAqIHRoZSBjbGFpbSBpcyByZW1vdmVkIGZyb20gdGhlIGZpbmFsIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAqIEZvciBleGFtcGxlLCBhIGNsYWltIGNvdWxkIGJlIG1hcHBlZCB0byBhIHNjb3BlIGFuZCBmb3VuZCBpbiB0aGUgdXNlciBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAqIGJ1dCBhbHNvIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50IHdpdGggcmVxdWlyZWQgdmFsdWVzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGNvbXB1dGVkIG9uZS4KICAgICAgICAgICAgICAgICAgICAgKiBAc2VlIHtsaW5rIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI0luZGl2aWR1YWxDbGFpbXNSZXF1ZXN0c30uCiAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSByZWxldmFudCBPSURDIHNwZWNpZmljYXRpb24gZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICBjb21wdXRlZENsYWltcy5yZW1vdmUoY2xhaW0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRDbGFpbXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbWFwIG9mIHJlcXVlc3RlZCBzY29wZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNsYWltIG5hbWVzLgogICAgICAgICAqIEByZXR1cm5zIHtqYXZhLnV0aWwuTGlua2VkSGFzaE1hcH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRDb21wb3NpdGVTY29wZXMgKCkgewogICAgICAgICAgICB2YXIgY29tcG9zaXRlU2NvcGVzID0gbmV3IGZySmF2YS5MaW5rZWRIYXNoTWFwKCk7CgogICAgICAgICAgICBzY29wZXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlKSB7CiAgICAgICAgICAgICAgICB2YXIgc2NvcGVDbGFpbXMgPSBuZXcgZnJKYXZhLkFycmF5TGlzdCgpOwoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltc01hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgICAgICBzY29wZUNsYWltc01hcFtzY29wZV0uZm9yRWFjaChmdW5jdGlvbiAoY2xhaW1OYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlQ2xhaW1zLmFkZChjbGFpbU5hbWUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzY29wZUNsYWltcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVTY29wZXMucHV0KHNjb3BlLCBzY29wZUNsYWltcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZVNjb3BlczsKICAgICAgICB9CgogICAgICAgIC8vIFBVQkxJQyBNRVRIT0RTCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHNldFNjb3BlQ2xhaW1zTWFwOiBzZXRTY29wZUNsYWltc01hcCwKICAgICAgICAgICAgc2V0Q2xhaW1SZXNvbHZlcnM6IHNldENsYWltUmVzb2x2ZXJzLAogICAgICAgICAgICBnZXRVc2VyUHJvZmlsZUNsYWltUmVzb2x2ZXI6IGdldFVzZXJQcm9maWxlQ2xhaW1SZXNvbHZlciwKICAgICAgICAgICAgZ2V0QWRkcmVzc0NsYWltUmVzb2x2ZXI6IGdldEFkZHJlc3NDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyOiBnZXRFc3NlbnRpYWxDbGFpbVJlc29sdmVyLAogICAgICAgICAgICBnZXRVc2VySW5mb0NsYWltczogZ2V0VXNlckluZm9DbGFpbXMKICAgICAgICB9OwogICAgfQoKICAgIC8vIFJFU1VMVFMKCiAgICAvKioKICAgICAqIFRoaXMgc2NyaXB0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG9yZy5mb3JnZXJvY2sub2F1dGgyLmNvcmUuVXNlckluZm9DbGFpbXMgY2xhc3MKICAgICAqIHBvcHVsYXRlZCB3aXRoIHRoZSBjb21wdXRlZCBjbGFpbSB2YWx1ZXMgYW5kCiAgICAgKiB0aGUgcmVxdWVzdGVkIHNjb3BlcyBtYXBwZWQgdG8gdGhlIGNsYWltIG5hbWVzLgogICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iYWNrc3RhZ2UuZm9yZ2Vyb2NrLmNvbS9kb2NzL2FtLzcvYXBpZG9jcy9vcmcvZm9yZ2Vyb2NrL29hdXRoMi9jb3JlL1VzZXJJbmZvQ2xhaW1zLmh0bWx9LgogICAgICoKICAgICAqIEFzc2lnbmluZyBpdCB0byBhIHZhcmlhYmxlIGdpdmVzIHlvdSBhbiBvcHBvcnR1bml0eQogICAgICogdG8gbG9nIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAgICAgKi8KICAgIHZhciB1c2VySW5mb0NsYWltcyA9IHV0aWxzLmdldFVzZXJJbmZvQ2xhaW1zKCk7CgogICAgLyoKICAgIGxvZ2dlci5lcnJvcihzY3JpcHROYW1lICsgJyByZXN1bHRzOicpCiAgICBsb2dnZXIuZXJyb3IoJ1ZhbHVlczogJyArIHVzZXJJbmZvQ2xhaW1zLmdldFZhbHVlcygpKQogICAgbG9nZ2VyLmVycm9yKCdTY29wZXM6ICcgKyB1c2VySW5mb0NsYWltcy5nZXRDb21wb3NpdGVTY29wZXMoKSkKICAgICovCgogICAgcmV0dXJuIHVzZXJJbmZvQ2xhaW1zOwp9KCkpOwo=\",\"description\":\"Default bravo realm script for OIDC claims\",\"lastModifiedBy\":\"null\",\"context\":\"OIDC_CLAIMS\",\"lastModifiedDate\":\"0\",\"name\":\"Bravo OIDC Claims Script\",\"_id\":\"3e31996b-4522-44a2-b360-0851cece3854\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V1_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogZGVidWcKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKgogKiBEaXNwbGF5IHNoYXJlZFN0YXRlLCB0cmFuc2llbnRTdGF0ZSwgYW5kIGhlYWRlcnMuCiAqCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciBhbmNob3IgPSAnYW5jaG9yLScuY29uY2F0KGdlbmVyYXRlTnVtZXJpY1Rva2VuKCd4eHgnKSk7CiAgdmFyIGhhbGlnbiA9ICdsZWZ0JzsKICB2YXIgbWVzc2FnZSA9ICI8cD48Yj5TaGFyZWQgU3RhdGU8L2I+Ojxici8+Ii5jb25jYXQoCiAgICAgIHNoYXJlZFN0YXRlLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpLmNvbmNhdCgKICAgICI8cD48Yj5UcmFuc2llbnQgU3RhdGU8L2I+Ojxici8+IikuY29uY2F0KAogICAgICB0cmFuc2llbnRTdGF0ZS50b1N0cmluZygpKS5jb25jYXQoIjwvcD4iKS5jb25jYXQoCiAgICAiPHA+PGI+UmVxdWVzdCBQYXJhbWV0ZXJzPC9iPjo8YnIvPiIpLmNvbmNhdCgKICAgIGdldFF1ZXJ5U3RyaW5nKCkpLmNvbmNhdCgiPGJyIikuY29uY2F0KAogICAgcmVxdWVzdFBhcmFtZXRlcnMudG9TdHJpbmcoKSkuY29uY2F0KCI8L3A+IikuY29uY2F0KAogICAgIjxwPjxiPlJlcXVlc3QgSGVhZGVyczwvYj46PGJyLz4iKS5jb25jYXQoCiAgICAgIHJlcXVlc3RIZWFkZXJzLnRvU3RyaW5nKCkpLmNvbmNhdCgiPC9wPiIpCiAgdmFyIHNjcmlwdCA9ICJBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChcbiIuY29uY2F0KAogICAgImRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NhbGxiYWNrLWNvbXBvbmVudCcpKS5mb3JFYWNoKFxuIikuY29uY2F0KAogICAgImZ1bmN0aW9uIChlKSB7XG4iKS5jb25jYXQoCiAgICAiICB2YXIgbWVzc2FnZSA9IGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4iKS5jb25jYXQoCiAgICAiICBjb25zb2xlLmxvZygnaGVyZSEnKTtcbiIpLmNvbmNhdCgKICAgICIgIGlmIChtZXNzYWdlLmZpcnN0Q2hpbGQgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVOYW1lID09ICcjdGV4dCcgJiYgbWVzc2FnZS5maXJzdENoaWxkLm5vZGVWYWx1ZS50cmltKCkgPT0gJyIpLmNvbmNhdChhbmNob3IpLmNvbmNhdCgiJykge1xuIikuY29uY2F0KAogICAgIiAgICBtZXNzYWdlLmNsYXNzTmFtZSA9IFwidGV4dC1sZWZ0XCI7XG4iKS5jb25jYXQoCiAgICAiICAgIG1lc3NhZ2UuYWxpZ24gPSBcIiIpLmNvbmNhdChoYWxpZ24pLmNvbmNhdCgiXCI7XG4iKS5jb25jYXQoCiAgICAiICAgIG1lc3NhZ2UuaW5uZXJIVE1MID0gJyIpLmNvbmNhdChtZXNzYWdlKS5jb25jYXQoIic7XG4iKS5jb25jYXQoCiAgICAiICB9XG4iKS5jb25jYXQoCiAgICAifSkiKQogIHZhciBmciA9IEphdmFJbXBvcnRlcigKICAgIG9yZy5mb3JnZXJvY2sub3BlbmFtLmF1dGgubm9kZS5hcGkuQWN0aW9uLAogICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5UZXh0T3V0cHV0Q2FsbGJhY2ssCiAgICBjb20uc3VuLmlkZW50aXR5LmF1dGhlbnRpY2F0aW9uLmNhbGxiYWNrcy5TY3JpcHRUZXh0T3V0cHV0Q2FsbGJhY2sKICApOwogIGlmIChtZXNzYWdlLmxlbmd0aCAmJiBjYWxsYmFja3MuaXNFbXB0eSgpKSB7CiAgICBhY3Rpb24gPSBmci5BY3Rpb24uc2VuZCgKICAgICAgbmV3IGZyLlRleHRPdXRwdXRDYWxsYmFjayhmci5UZXh0T3V0cHV0Q2FsbGJhY2suSU5GT1JNQVRJT04sIG1lc3NhZ2UpLAogICAgICBuZXcgZnIuU2NyaXB0VGV4dE91dHB1dENhbGxiYWNrKHNjcmlwdCkKICAgICkuYnVpbGQoKTsKICB9IGVsc2UgewogICAgYWN0aW9uID0gZnIuQWN0aW9uLmdvVG8oJ3RydWUnKS5idWlsZCgpOwogIH0KCiAgLyoKICAgKiBHZW5lcmF0ZSBhIHRva2VuIGluIHRoZSBkZXNpcmVkIGZvcm1hdC4gQWxsICd4JyBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHJhbmRvbSBudW1iZXIgMC05LgogICAqCiAgICogRXhhbXBsZToKICAgKiAneHh4eHgnIHByb2R1Y2VzICcyODUzNScKICAgKiAneHh4LXh4eCcgcHJvZHVjZXMgJzQzMi01MjEnCiAgICovCiAgZnVuY3Rpb24gZ2VuZXJhdGVOdW1lcmljVG9rZW4oZm9ybWF0KSB7CiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1t4XS9nLCBmdW5jdGlvbiAoYykgewogICAgICB2YXIgciA9IChNYXRoLnJhbmRvbSgpICogMTApIHwgMDsKICAgICAgdmFyIHYgPSByOwogICAgICByZXR1cm4gdi50b1N0cmluZygxMCk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGdldFF1ZXJ5U3RyaW5nKCkgewogIAogICAgcmVxdWVzdFBhcmFtZXRlcnMucHV0KCdhdXRoSW5kZXhUeXBlJywgWydzZXJ2aWNlJ10pOwogICAgcmVxdWVzdFBhcmFtZXRlcnMucHV0KCdhdXRoSW5kZXhWYWx1ZScsIFsnU2ltcGxlJ10pOwogICAgcmVxdWVzdFBhcmFtZXRlcnMucHV0KCd1c2VybmFtZScsIFtzaGFyZWRTdGF0ZS5nZXQoJ3VzZXJuYW1lJyldKTsKICAgIAogICAgdmFyIHF1ZXJ5ID0gJyc7CiAgICB2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMocmVxdWVzdFBhcmFtZXRlcnMpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoIDsgaSsrKSB7CiAgICAgIHZhciBwYXJhbSA9IHBhcmFtc1tpXTsKICAgICAgdmFyIHZhbHVlcyA9IHJlcXVlc3RQYXJhbWV0ZXJzLmdldChwYXJhbSk7CiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsdWVzLmxlbmd0aCA7IGorKykgewogICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tqXTsKICAgICAgICBxdWVyeSA9IHF1ZXJ5ICsgcGFyYW0gKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpICsgJyYnOwogICAgICB9OwogICAgfTsKICAgIHJldHVybiBxdWVyeS5zdWJzdHJpbmcoMCwgcXVlcnkubGVuZ3RoID4gMCA/IHF1ZXJ5Lmxlbmd0aCAtIDEgOiAwKTsKICB9Cn0pKCk7Cg==\",\"description\":\"Display sharedState, transientState, and headers.\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"debug - imported (1)\",\"_id\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"createdBy\":\"null\",\"evaluatorVersion\":\"V2_0\",\"creationDate\":\"0\",\"language\":\"JAVASCRIPT\",\"script\":\"LyogTG9hZCBSZWZlcmVuY2UgU2VsZmllCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIExvYWQgcmVmZXJlbmNlIHNlbGZpZSBpbnRvIHRyYW5zaWVudCBzdGF0ZQogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwooZnVuY3Rpb24gKCkgewogIG91dGNvbWUgPSAndHJ1ZSc7CgogIHZhciBzZWxmaWVBdHRyID0gJ2ZyLWF0dHItc3RyMSc7CiAgdmFyIGlkZW50aXR5ID0gaWRSZXBvc2l0b3J5LmdldElkZW50aXR5KG5vZGVTdGF0ZS5nZXQoJ19pZCcpKTsKICB2YXIgc2VsZmllID0gaWRlbnRpdHkuZ2V0QXR0cmlidXRlVmFsdWVzKHNlbGZpZUF0dHIpWzBdOwogIGlmIChzZWxmaWUpIHsKICAgIHNldFRyYW5zaWVudE9iamVjdEF0dHJpYnV0ZShzZWxmaWVBdHRyLCBzZWxmaWUpOwogIH0KCiAgLyoKICAgKiBTdG9yZSBhdHRyaWJ1dGVzIGluIHNoYXJlZCBzdGF0ZSBmb3IgdXNlIHdpdGggdGhlIENyZWF0ZS9QYXRjaCBPYmplY3Qgbm9kZXMuCiAgICovCiAgZnVuY3Rpb24gc2V0VHJhbnNpZW50T2JqZWN0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7CiAgICB2YXIgYXR0cmlidXRlcyA9IG5vZGVTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKTsKICAgIGlmIChhdHRyaWJ1dGVzICYmIHZhbHVlKSB7CiAgICAgIGF0dHJpYnV0ZXMucHV0KG5hbWUsIHZhbHVlKTsKICAgICAgbm9kZVN0YXRlLnB1dFRyYW5zaWVudCgib2JqZWN0QXR0cmlidXRlcyIsIGF0dHJpYnV0ZXMpOwogICAgfSBlbHNlIGlmICh2YWx1ZSkgewogICAgICBub2RlU3RhdGUucHV0VHJhbnNpZW50KCJvYmplY3RBdHRyaWJ1dGVzIiwgeyBuYW1lOiB2YWx1ZSB9ICk7CiAgICB9CiAgfQp9KCkpOwo=\",\"description\":\"Load reference selfie into shared state\",\"lastModifiedBy\":\"null\",\"context\":\"AUTHENTICATION_TREE_DECISION_NODE\",\"lastModifiedDate\":\"0\",\"name\":\"Load Reference Selfie\",\"_id\":\"09d6f27b-3c7c-4bc0-a7ff-e19d93f6b6d9\",\"_type\":{\"_id\":\"scripts\",\"name\":\"Scripting\",\"collection\":true}},{\"enabled\":true,\"_id\":\"SocialIdentityProviders\",\"_type\":{\"_id\":\"SocialIdentityProviders\",\"name\":\"Social Identity Provider Service\",\"collection\":false}},{\"advancedOIDCConfig\":{\"supportedRequestParameterEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"authorisedOpenIdConnectSSOClients\":[],\"supportedUserInfoEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"supportedAuthorizationResponseEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"supportedTokenIntrospectionResponseEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"useForceAuthnForPromptLogin\":false,\"useForceAuthnForMaxAge\":false,\"alwaysAddClaimsToToken\":true,\"supportedTokenIntrospectionResponseSigningAlgorithms\":[\"PS384\",\"RS384\",\"EdDSA\",\"ES384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedTokenEndpointAuthenticationSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedRequestParameterSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"includeAllKtyAlgCombinationsInJwksUri\":false,\"amrMappings\":{},\"loaMapping\":{},\"authorisedIdmDelegationClients\":[],\"idTokenInfoClientAuthenticationEnabled\":true,\"storeOpsTokens\":true,\"supportedUserInfoSigningAlgorithms\":[\"ES384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\"],\"supportedAuthorizationResponseSigningAlgorithms\":[\"PS384\",\"RS384\",\"EdDSA\",\"ES384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedUserInfoEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"claimsParameterSupported\":false,\"supportedTokenIntrospectionResponseEncryptionEnc\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"supportedAuthorizationResponseEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"supportedRequestParameterEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"ECDH-ES+A128KW\",\"RSA-OAEP\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"defaultACR\":[]},\"advancedOAuth2Config\":{\"passwordGrantAuthService\":\"Login\",\"includeClientIdClaimInStatelessTokens\":true,\"tokenCompressionEnabled\":false,\"tokenEncryptionEnabled\":false,\"requirePushedAuthorizationRequests\":false,\"tlsCertificateBoundAccessTokensEnabled\":true,\"includeSubnameInTokenClaims\":true,\"defaultScopes\":[\"address\",\"phone\",\"openid\",\"profile\",\"email\"],\"moduleMessageEnabledInPasswordGrant\":false,\"allowClientCredentialsInTokenRequestQueryParameters\":true,\"supportedSubjectTypes\":[\"public\",\"pairwise\"],\"refreshTokenGracePeriod\":0,\"tlsClientCertificateHeaderFormat\":\"URLENCODED_PEM\",\"hashSalt\":\"&{am.oidc.client.subject.identifier.hash.salt}\",\"macaroonTokenFormat\":\"V2\",\"maxAgeOfRequestObjectNbfClaim\":0,\"tlsCertificateRevocationCheckingEnabled\":false,\"nbfClaimRequiredInRequestObject\":false,\"requestObjectProcessing\":\"OIDC\",\"maxDifferenceBetweenRequestObjectNbfAndExp\":0,\"responseTypeClasses\":[\"code|org.forgerock.oauth2.core.AuthorizationCodeResponseTypeHandler\",\"device_code|org.forgerock.oauth2.core.TokenResponseTypeHandler\",\"token|org.forgerock.oauth2.core.TokenResponseTypeHandler\",\"id_token|org.forgerock.openidconnect.IdTokenResponseTypeHandler\"],\"expClaimRequiredInRequestObject\":false,\"tokenValidatorClasses\":[\"urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.idtoken.OidcIdTokenValidator\",\"urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.OAuth2AccessTokenValidator\"],\"tokenSigningAlgorithm\":\"HS256\",\"codeVerifierEnforced\":\"false\",\"displayNameAttribute\":\"cn\",\"tokenExchangeClasses\":[\"urn:ietf:params:oauth:token-type:access_token=>urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.AccessTokenToAccessTokenExchanger\",\"urn:ietf:params:oauth:token-type:id_token=>urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.idtoken.IdTokenToIdTokenExchanger\",\"urn:ietf:params:oauth:token-type:access_token=>urn:ietf:params:oauth:token-type:id_token|org.forgerock.oauth2.core.tokenexchange.accesstoken.AccessTokenToIdTokenExchanger\",\"urn:ietf:params:oauth:token-type:id_token=>urn:ietf:params:oauth:token-type:access_token|org.forgerock.oauth2.core.tokenexchange.idtoken.IdTokenToAccessTokenExchanger\"],\"parRequestUriLifetime\":90,\"allowedAudienceValues\":[],\"persistentClaims\":[],\"supportedScopes\":[\"email|Your email address\",\"openid|\",\"address|Your postal address\",\"phone|Your telephone number(s)\",\"profile|Your personal information\",\"fr:idm:*\",\"am-introspect-all-tokens\"],\"authenticationAttributes\":[\"uid\"],\"grantTypes\":[\"implicit\",\"urn:ietf:params:oauth:grant-type:saml2-bearer\",\"refresh_token\",\"password\",\"client_credentials\",\"urn:ietf:params:oauth:grant-type:device_code\",\"authorization_code\",\"urn:openid:params:grant-type:ciba\",\"urn:ietf:params:oauth:grant-type:uma-ticket\",\"urn:ietf:params:oauth:grant-type:jwt-bearer\"]},\"clientDynamicRegistrationConfig\":{\"dynamicClientRegistrationScope\":\"dynamic_client_registration\",\"allowDynamicRegistration\":false,\"requiredSoftwareStatementAttestedAttributes\":[\"redirect_uris\"],\"dynamicClientRegistrationSoftwareStatementRequired\":false,\"generateRegistrationAccessTokens\":true},\"coreOIDCConfig\":{\"overrideableOIDCClaims\":[],\"oidcDiscoveryEndpointEnabled\":true,\"supportedIDTokenEncryptionMethods\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"supportedClaims\":[],\"supportedIDTokenSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedIDTokenEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"jwtTokenLifetime\":3600},\"coreOAuth2Config\":{\"refreshTokenLifetime\":604800,\"scopesPolicySet\":\"oauth2Scopes\",\"accessTokenMayActScript\":\"[Empty]\",\"accessTokenLifetime\":3600,\"macaroonTokensEnabled\":false,\"codeLifetime\":120,\"statelessTokensEnabled\":true,\"usePolicyEngineForScope\":false,\"issueRefreshToken\":true,\"oidcMayActScript\":\"[Empty]\",\"issueRefreshTokenOnRefreshedToken\":true},\"consent\":{\"supportedRcsRequestSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedRcsResponseEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"ECDH-ES+A128KW\",\"RSA-OAEP\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"supportedRcsRequestEncryptionMethods\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"],\"enableRemoteConsent\":false,\"supportedRcsRequestEncryptionAlgorithms\":[\"ECDH-ES+A256KW\",\"ECDH-ES+A192KW\",\"RSA-OAEP\",\"ECDH-ES+A128KW\",\"RSA-OAEP-256\",\"A128KW\",\"A256KW\",\"ECDH-ES\",\"dir\",\"A192KW\"],\"clientsCanSkipConsent\":true,\"supportedRcsResponseSigningAlgorithms\":[\"PS384\",\"ES384\",\"RS384\",\"HS256\",\"HS512\",\"ES256\",\"RS256\",\"HS384\",\"ES512\",\"PS256\",\"PS512\",\"RS512\"],\"supportedRcsResponseEncryptionMethods\":[\"A256GCM\",\"A192GCM\",\"A128GCM\",\"A128CBC-HS256\",\"A192CBC-HS384\",\"A256CBC-HS512\"]},\"deviceCodeConfig\":{\"deviceUserCodeLength\":8,\"deviceCodeLifetime\":300,\"deviceUserCodeCharacterSet\":\"234567ACDEFGHJKLMNPQRSTWXYZabcdefhijkmnopqrstwxyz\",\"devicePollInterval\":5},\"pluginsConfig\":{\"evaluateScopeClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"validateScopeScript\":\"[Empty]\",\"accessTokenEnricherClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"oidcClaimsPluginType\":\"SCRIPTED\",\"authorizeEndpointDataProviderClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"authorizeEndpointDataProviderPluginType\":\"JAVA\",\"userCodeGeneratorClass\":\"org.forgerock.oauth2.core.plugins.registry.DefaultUserCodeGenerator\",\"evaluateScopeScript\":\"[Empty]\",\"oidcClaimsClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"evaluateScopePluginType\":\"JAVA\",\"authorizeEndpointDataProviderScript\":\"[Empty]\",\"accessTokenModifierClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\",\"accessTokenModificationScript\":\"21138ab1-0621-4466-b18f-670bfcbabca7\",\"validateScopePluginType\":\"JAVA\",\"accessTokenModificationPluginType\":\"SCRIPTED\",\"oidcClaimsScript\":\"3e31996b-4522-44a2-b360-0851cece3854\",\"validateScopeClass\":\"org.forgerock.openam.oauth2.OpenAMScopeValidator\"},\"cibaConfig\":{\"cibaMinimumPollingInterval\":2,\"supportedCibaSigningAlgorithms\":[\"ES256\",\"PS256\"],\"cibaAuthReqIdLifetime\":600},\"_id\":\"oauth-oidc\",\"_type\":{\"_id\":\"oauth-oidc\",\"name\":\"OAuth2 Provider\",\"collection\":false}},{\"sunIdRepoAttributeCombiner\":\"com.iplanet.am.sdk.AttributeCombiner\",\"sunIdRepoAttributeValidator\":[\"class=com.sun.identity.idm.server.IdRepoAttributeValidatorImpl\",\"minimumPasswordLength=8\",\"usernameInvalidChars=*|(|)|&|!\"],\"_id\":\"id-repositories\",\"_type\":{\"_id\":\"id-repositories\",\"name\":\"sunIdentityRepositoryService\",\"collection\":false}},{\"enabled\":true,\"_id\":\"pingOneWorkerService\",\"_type\":{\"_id\":\"pingOneWorkerService\",\"name\":\"PingOne Worker Service\",\"collection\":false}},{\"source\":\"REQUEST_VALUES\",\"fixedValue\":\"https://&{fqdn}\",\"contextPath\":\"/am\",\"_id\":\"baseurl\",\"_type\":{\"_id\":\"baseurl\",\"name\":\"Base URL Source\",\"collection\":false}},{\"validGotoDestinations\":[\"&{am.server.protocol|https}://&{fqdn}/*?*\"],\"_id\":\"validation\",\"_type\":{\"_id\":\"validation\",\"name\":\"Validation Service\",\"collection\":false}},{\"applicationDataStoreId\":\"application-store\",\"policyDataStoreId\":\"policy-store\",\"_id\":\"DataStoreService\",\"_type\":{\"_id\":\"DataStoreService\",\"name\":\"External Data Stores\",\"collection\":false}}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 773, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:09.883Z", - "time": 406, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 406 - } - }, - { - "_id": "f8be81474c33a874ee3e5c544677f30b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2003, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/email" - }, - "response": { - "bodySize": 286, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 286, - "text": "{\"_id\":\"\",\"_rev\":\"1248750872\",\"emailAddressAttribute\":\"mail\",\"transportType\":\"default-smtp\",\"emailRateLimitSeconds\":1,\"emailImplClassName\":\"org.forgerock.openam.services.email.MailServerImpl\",\"port\":465,\"sslState\":\"SSL\",\"_type\":{\"_id\":\"email\",\"name\":\"Email Service\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1248750872\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "286" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.315Z", - "time": 82, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 82 - } - }, - { - "_id": "405c8c39aba264ba45471ba187af9ada", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2028, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/email?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.319Z", - "time": 110, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 110 - } - }, - { - "_id": "151662837f7174d3ede8fb8245ad1240", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2016, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/TNTPPingOneService" - }, - "response": { - "bodySize": 125, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 125, - "text": "{\"_id\":\"\",\"_rev\":\"1688843526\",\"enable\":true,\"_type\":{\"_id\":\"TNTPPingOneService\",\"name\":\"PingOne Service\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1688843526\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "125" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.321Z", - "time": 84, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 84 - } - }, - { - "_id": "66f871f69ffab1a87223b3d7bd3ae19a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2041, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/TNTPPingOneService?_action=nextdescendents" - }, - "response": { - "bodySize": 645, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 645, - "text": "{\"result\":[{\"clientIdWorkerSecret\":\"MYeArFcBVz_koayPMhz8dSmkKN9P1SjEA3CApwzWTfKuGvhS3XERxRpR1zTYg0ZT\",\"clientIdWorkerApp\":\"9e4b8778-8d02-4533-b11f-407c15e5519e\",\"environmentId\":\"183aa418-cdd3-4075-b20d-1ed89c8ca36e\",\"environmentRegion\":\"NA\",\"_id\":\"p1-volker-dev\",\"_type\":{\"_id\":\"PingOneService\",\"name\":\"instance\",\"collection\":true}},{\"clientIdWorkerSecret\":\"PYT2yEkgv73IAXf7W-Gxo32SdANddMPdRPHuo8btgIR~qoU_KBmP3NfGpVxxGCK-\",\"clientIdWorkerApp\":\"bc700ab9-b18d-4d75-9c10-0ddfd7a2fcf6\",\"environmentId\":\"77826556-ad2a-4cb9-86fc-41f53fd35d4d\",\"environmentRegion\":\"NA\",\"_id\":\"JC\",\"_type\":{\"_id\":\"PingOneService\",\"name\":\"instance\",\"collection\":true}}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "645" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 766, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.323Z", - "time": 115, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 115 - } - }, - { - "_id": "6106479c8101f1a2eb50b525d682a41e", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2017, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/policyconfiguration" - }, - "response": { - "bodySize": 837, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 837, - "text": "{\"_id\":\"\",\"_rev\":\"-1504612008\",\"userAliasEnabled\":false,\"connectionPoolMinimumSize\":1,\"maximumSearchResults\":100,\"policyHeartbeatTimeUnit\":\"SECONDS\",\"searchTimeout\":5,\"usersSearchAttribute\":\"uid\",\"policyHeartbeatInterval\":10,\"usersSearchScope\":\"SCOPE_SUB\",\"subjectsResultTTL\":10,\"checkIfResourceTypeExists\":true,\"connectionPoolMaximumSize\":10,\"sslEnabled\":{\"$bool\":\"&{am.stores.ssl.enabled}\"},\"bindDn\":\"&{am.stores.user.username}\",\"ldapServer\":[\"userstore-1.userstore:1389\",\"userstore-0.userstore:1389\",\"userstore-2.userstore:1389\"],\"mtlsEnabled\":false,\"bindPassword\":{\"$string\":\"&{am.stores.user.password}\"},\"realmSearchFilter\":\"(objectclass=sunismanagedorganization)\",\"usersSearchFilter\":\"(objectclass=inetorgperson)\",\"usersBaseDn\":\"ou=identities\",\"_type\":{\"_id\":\"policyconfiguration\",\"name\":\"Policy Configuration\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1504612008\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "837" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.325Z", - "time": 81, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 81 - } - }, - { - "_id": "51035a6e6ff65188fa59efdffaad2184", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2042, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/policyconfiguration?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.327Z", - "time": 104, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 104 - } - }, - { - "_id": "56f1ee37f9b69e29235a6caad39b03d9", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2014, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/selfServiceTrees" - }, - "response": { - "bodySize": 279, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 279, - "text": "{\"_id\":\"\",\"_rev\":\"-948959244\",\"treeMapping\":{\"forgottenUsername\":\"ForgottenUsername\",\"registration\":\"Registration\",\"resetPassword\":\"ResetPassword\",\"updatePassword\":\"UpdatePassword\"},\"enabled\":true,\"_type\":{\"_id\":\"selfServiceTrees\",\"name\":\"Self Service Trees\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-948959244\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "279" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.329Z", - "time": 91, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 91 - } - }, - { - "_id": "3db1215925122a2e86913c13cb73fa07", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2039, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/selfServiceTrees?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.331Z", - "time": 101, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 101 - } - }, - { - "_id": "be9d64cd60e1efd336425211e15ef276", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2021, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/SocialIdentityProviders" - }, - "response": { - "bodySize": 148, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 148, - "text": "{\"_id\":\"\",\"_rev\":\"1077208638\",\"enabled\":true,\"_type\":{\"_id\":\"SocialIdentityProviders\",\"name\":\"Social Identity Provider Service\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1077208638\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "148" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.333Z", - "time": 92, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 92 - } - }, - { - "_id": "e182919458a3cd7f92b462ed279d2189", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2046, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/SocialIdentityProviders?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.336Z", - "time": 94, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 94 - } - }, - { - "_id": "e4ee121e8f98c05d90b58547a7a7506b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/oauth-oidc?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.341Z", - "time": 177, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 177 - } - }, - { - "_id": "11378ef75f20c4102c2fbfe78764f3fc", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2013, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/id-repositories" - }, - "response": { - "bodySize": 114, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 114, - "text": "{\"code\":403,\"reason\":\"Forbidden\",\"message\":\"This operation is not available in PingOne Advanced Identity Cloud.\"}" - }, - "cookies": [], - "headers": [ - { - "name": "cache-control", - "value": "private, no-store" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000;includeSubDomains;preload" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 292, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 403, - "statusText": "Forbidden" - }, - "startedDateTime": "2024-10-30T20:55:10.345Z", - "time": 108, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 108 - } - }, - { - "_id": "c4c1ce80542cb6f5eea24b4890e0019d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2038, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/id-repositories?_action=nextdescendents" - }, - "response": { - "bodySize": 114, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 114, - "text": "{\"code\":403,\"reason\":\"Forbidden\",\"message\":\"This operation is not available in PingOne Advanced Identity Cloud.\"}" - }, - "cookies": [], - "headers": [ - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000;includeSubDomains;preload" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 283, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 403, - "statusText": "Forbidden" - }, - "startedDateTime": "2024-10-30T20:55:10.349Z", - "time": 103, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 103 - } - }, - { - "_id": "e7259ce07432717872638c3c9e234f6c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2018, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/pingOneWorkerService" - }, - "response": { - "bodySize": 135, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 135, - "text": "{\"_id\":\"\",\"_rev\":\"-945038405\",\"enabled\":true,\"_type\":{\"_id\":\"pingOneWorkerService\",\"name\":\"PingOne Worker Service\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-945038405\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "135" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.352Z", - "time": 153, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 153 - } - }, - { - "_id": "0f690cb573653f5a59a93438676a1373", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2043, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/pingOneWorkerService?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.355Z", - "time": 164, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 164 - } - }, - { - "_id": "eb43723b5a888da8a42f6e921f3bcac5", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2005, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/baseurl" - }, - "response": { - "bodySize": 178, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 178, - "text": "{\"_id\":\"\",\"_rev\":\"-1889820858\",\"source\":\"REQUEST_VALUES\",\"fixedValue\":\"https://&{fqdn}\",\"contextPath\":\"/am\",\"_type\":{\"_id\":\"baseurl\",\"name\":\"Base URL Source\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1889820858\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "178" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.359Z", - "time": 151, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 151 - } - }, - { - "_id": "ce9aea1821bef24b368bfefc85ff93d3", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2030, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/baseurl?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.362Z", - "time": 145, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 145 - } - }, - { - "_id": "d9d193912603459e8cac13da64127a52", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2008, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/validation" - }, - "response": { - "bodySize": 175, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 175, - "text": "{\"_id\":\"\",\"_rev\":\"896681690\",\"validGotoDestinations\":[\"&{am.server.protocol|https}://&{fqdn}/*?*\"],\"_type\":{\"_id\":\"validation\",\"name\":\"Validation Service\",\"collection\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"896681690\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "175" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.364Z", - "time": 142, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 142 - } - }, - { - "_id": "6c92e4a5461e24777448b3afd6f529f9", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/validation?_action=nextdescendents" - }, - "response": { - "bodySize": 13, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 13, - "text": "{\"result\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "13" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 765, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.368Z", - "time": 134, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 134 - } - }, - { - "_id": "fa0d0e58c29b7d410c44c18c6cf9567b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2014, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/DataStoreService" - }, - "response": { - "bodySize": 114, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 114, - "text": "{\"code\":403,\"reason\":\"Forbidden\",\"message\":\"This operation is not available in PingOne Advanced Identity Cloud.\"}" - }, - "cookies": [], - "headers": [ - { - "name": "cache-control", - "value": "private, no-store" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000;includeSubDomains;preload" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 292, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 403, - "statusText": "Forbidden" - }, - "startedDateTime": "2024-10-30T20:55:10.370Z", - "time": 84, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 84 - } - }, - { - "_id": "2f0c65a8131662ec6ad1b00ad9b88a59", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2039, - "httpVersion": "HTTP/1.1", - "method": "POST", - "queryString": [ - { - "name": "_action", - "value": "nextdescendents" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/services/DataStoreService?_action=nextdescendents" - }, - "response": { - "bodySize": 114, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 114, - "text": "{\"code\":403,\"reason\":\"Forbidden\",\"message\":\"This operation is not available in PingOne Advanced Identity Cloud.\"}" - }, - "cookies": [], - "headers": [ - { - "name": "cache-control", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000;includeSubDomains;preload" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 283, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 403, - "statusText": "Forbidden" - }, - "startedDateTime": "2024-10-30T20:55:10.373Z", - "time": 91, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 91 - } - }, - { - "_id": "24cc8b2ff02d717c2b73f6f82f9f7b8f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2047, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/trees?_queryFilter=true" - }, - "response": { - "bodySize": 21463, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 21463, - "text": "{\"result\":[{\"_id\":\"ResetPassword\",\"_rev\":\"-2043431286\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"Password Reset\\\"]\"},\"entryNodeId\":\"cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b\",\"innerTreeOnly\":false,\"nodes\":{\"06c97be5-7fdd-4739-aea1-ecc7fe082865\":{\"connections\":{\"outcome\":\"e4c752f9-c625-48c9-9644-a58802fa9e9c\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":453,\"y\":66},\"21b8ddf3-0203-4ae1-ab05-51cf3a3a707a\":{\"connections\":{\"false\":\"06c97be5-7fdd-4739-aea1-ecc7fe082865\",\"true\":\"06c97be5-7fdd-4739-aea1-ecc7fe082865\"},\"displayName\":\"Identify Existing User\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":271,\"y\":21},\"989f0bf8-a328-4217-b82b-5275d79ca8bd\":{\"connections\":{\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"PATCHED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Patch Object\",\"nodeType\":\"PatchObjectNode\",\"x\":819,\"y\":61},\"cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b\":{\"connections\":{\"outcome\":\"21b8ddf3-0203-4ae1-ab05-51cf3a3a707a\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":103,\"y\":50},\"e4c752f9-c625-48c9-9644-a58802fa9e9c\":{\"connections\":{\"outcome\":\"989f0bf8-a328-4217-b82b-5275d79ca8bd\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":643,\"y\":50}},\"description\":\"Reset Password Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":970,\"y\":79},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":981,\"y\":147},\"startNode\":{\"x\":25,\"y\":25}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"IntervieweeFullVerification\",\"_rev\":\"1102600689\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"IDV\\\",\\\"P1 Verify\\\"]\"},\"entryNodeId\":\"4b19c2c8-26be-4cc7-91f8-722d87142521\",\"innerTreeOnly\":false,\"nodes\":{\"12f631e5-4a0f-41bd-9eea-ddbdfc4ceefc\":{\"connections\":{\"200\":\"986e0137-fe9f-4e2a-b37f-21bd13fbe6ce\",\"ERROR\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\",\"NOMATCHRESPONSE\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\"},\"displayName\":\"Get Verify Data\",\"nodeType\":\"RESTNode\",\"x\":812,\"y\":396.015625},\"1c08a0f6-d9bb-4bb9-970f-c5941d6c8d9a\":{\"connections\":{\"true\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Success Dialog\",\"nodeType\":\"PageNode\",\"x\":1479,\"y\":53.015625},\"1c8fb336-8d51-466c-933b-635c5b00365a\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Cancel Dialog\",\"nodeType\":\"PageNode\",\"x\":1480,\"y\":244.015625},\"25c5fa53-3369-441a-bbc8-4fe8c0f2c2a1\":{\"connections\":{\"true\":\"1c08a0f6-d9bb-4bb9-970f-c5941d6c8d9a\"},\"displayName\":\"Debug\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":1258,\"y\":244.015625},\"2e801ab7-5412-4388-990b-84070f130994\":{\"connections\":{\"CANCEL\":\"1c8fb336-8d51-466c-933b-635c5b00365a\",\"ERROR\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\",\"FAIL\":\"12f631e5-4a0f-41bd-9eea-ddbdfc4ceefc\",\"FAILPATCH\":\"12f631e5-4a0f-41bd-9eea-ddbdfc4ceefc\",\"SUCCESPATCH\":\"e8efdd39-8cb8-4bff-a2bf-c9decd805252\",\"SUCCESS\":\"e8efdd39-8cb8-4bff-a2bf-c9decd805252\"},\"displayName\":\"ID Proof Interviewee\",\"nodeType\":\"PageNode\",\"x\":554,\"y\":151.015625},\"4885ef18-2a01-48bf-9b35-cda88b348e71\":{\"connections\":{\"outcome\":\"798d799c-2a12-4af1-a611-9ffa5f694303\"},\"displayName\":\"DEMO ONLY!!!\",\"nodeType\":\"PageNode\",\"x\":165,\"y\":527.015625},\"4b19c2c8-26be-4cc7-91f8-722d87142521\":{\"connections\":{\"known\":\"c37589da-c897-417f-8afa-74a3b130042a\",\"unknown\":\"4885ef18-2a01-48bf-9b35-cda88b348e71\"},\"displayName\":\"Check Username\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":165,\"y\":229.015625},\"4b4cc53a-4d3a-4fb4-9815-1b65d970efc3\":{\"connections\":{\"true\":\"859c73ff-f04e-42e5-91f5-9ca908c289bb\"},\"displayName\":\"Debug\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":1273,\"y\":601.015625},\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Error Dialog\",\"nodeType\":\"PageNode\",\"x\":1480,\"y\":573.015625},\"737a2e1a-008a-45da-bb1a-176b7ccc5230\":{\"connections\":{\"false\":\"1c08a0f6-d9bb-4bb9-970f-c5941d6c8d9a\",\"true\":\"1c08a0f6-d9bb-4bb9-970f-c5941d6c8d9a\"},\"displayName\":\"Stop Screen Share\",\"nodeType\":\"PageNode\",\"x\":1248,\"y\":54.015625},\"798d799c-2a12-4af1-a611-9ffa5f694303\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"4b19c2c8-26be-4cc7-91f8-722d87142521\"},\"displayName\":\"Identify Existing User\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":492,\"y\":531.015625},\"7b3211a0-debc-465f-bc81-f530458127c8\":{\"connections\":{\"false\":\"859c73ff-f04e-42e5-91f5-9ca908c289bb\",\"true\":\"859c73ff-f04e-42e5-91f5-9ca908c289bb\"},\"displayName\":\"Stop Screen Share\",\"nodeType\":\"PageNode\",\"x\":1250,\"y\":381.015625},\"859c73ff-f04e-42e5-91f5-9ca908c289bb\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Failure Dialog\",\"nodeType\":\"PageNode\",\"x\":1477,\"y\":379.015625},\"8b6a4da7-d6eb-47cb-bb65-84757cdb1888\":{\"connections\":{\"FAILURE\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\",\"PATCHED\":\"737a2e1a-008a-45da-bb1a-176b7ccc5230\"},\"displayName\":\"Update Account\",\"nodeType\":\"PatchObjectNode\",\"x\":1040,\"y\":124.015625},\"986e0137-fe9f-4e2a-b37f-21bd13fbe6ce\":{\"connections\":{\"true\":\"bbd56ddb-17de-4e73-b61c-856301637712\"},\"displayName\":\"Prepare Update\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":1037,\"y\":370.015625},\"bbd56ddb-17de-4e73-b61c-856301637712\":{\"connections\":{\"FAILURE\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\",\"PATCHED\":\"7b3211a0-debc-465f-bc81-f530458127c8\"},\"displayName\":\"Update Account\",\"nodeType\":\"PatchObjectNode\",\"x\":1038,\"y\":451.015625},\"bf42cd1b-23e2-4f0d-9370-3299b2f39086\":{\"connections\":{\"true\":\"8b6a4da7-d6eb-47cb-bb65-84757cdb1888\"},\"displayName\":\"Prepare Update\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":1039,\"y\":42.015625},\"c37589da-c897-417f-8afa-74a3b130042a\":{\"connections\":{\"false\":\"798d799c-2a12-4af1-a611-9ffa5f694303\",\"true\":\"2e801ab7-5412-4388-990b-84070f130994\"},\"displayName\":\"Username resolved?\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":355,\"y\":231.015625},\"e8efdd39-8cb8-4bff-a2bf-c9decd805252\":{\"connections\":{\"200\":\"bf42cd1b-23e2-4f0d-9370-3299b2f39086\",\"ERROR\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\",\"NOMATCHRESPONSE\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\"},\"displayName\":\"Get Verify Data\",\"nodeType\":\"RESTNode\",\"x\":807,\"y\":69.015625}},\"description\":\"Interviewee full identity verification\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1735,\"y\":36},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1741,\"y\":642},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"IntervieweeRegistration\",\"_rev\":\"-1875023946\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"P1 Verify\\\"]\"},\"entryNodeId\":\"1f503e47-5b59-4ff3-950b-d86f75daedd9\",\"innerTreeOnly\":false,\"nodes\":{\"029c508c-2c37-47b5-842d-6a914106995b\":{\"connections\":{\"false\":\"2295c6bc-6eb5-4822-978e-640312c34ea0\",\"true\":\"5a52a154-9bc9-461a-aee2-85e9cfb34fd9\"},\"displayName\":\"Already verified\",\"nodeType\":\"PageNode\",\"x\":853,\"y\":292.015625},\"139d3499-ebe9-48aa-8230-a7ee11165f60\":{\"connections\":{\"false\":\"ae3b66b6-f4b1-4b40-ad90-f478a9c766a2\",\"true\":\"af9a8a68-571a-4434-9b3d-bc84e4ec6fb6\"},\"displayName\":\"Lookup Interviewee\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":386,\"y\":232.015625},\"1e4264ea-7329-4ab6-b536-2990ba2ff6c0\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Error Creating Account\",\"nodeType\":\"PageNode\",\"x\":1552,\"y\":253.015625},\"1f503e47-5b59-4ff3-950b-d86f75daedd9\":{\"connections\":{\"outcome\":\"139d3499-ebe9-48aa-8230-a7ee11165f60\"},\"displayName\":\"Register Interviewee\",\"nodeType\":\"PageNode\",\"x\":164,\"y\":230.015625},\"2295c6bc-6eb5-4822-978e-640312c34ea0\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Selfie Authenticate\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":1550,\"y\":387.015625},\"5214b99f-fd80-4f25-8798-4530eea5e3cb\":{\"connections\":{\"CREATED\":\"b5ca1e74-ee28-45ef-95ee-bf53e1ead142\",\"FAILURE\":\"1e4264ea-7329-4ab6-b536-2990ba2ff6c0\"},\"displayName\":\"Create Account\",\"nodeType\":\"CreateObjectNode\",\"x\":1317,\"y\":179.015625},\"5a52a154-9bc9-461a-aee2-85e9cfb34fd9\":{\"connections\":{\"true\":\"d31ee3a0-9b8d-4f72-9037-deb2eb27268a\"},\"displayName\":\"Prepare Account\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":1098,\"y\":546.015625},\"ae3b66b6-f4b1-4b40-ad90-f478a9c766a2\":{\"connections\":{\"true\":\"5214b99f-fd80-4f25-8798-4530eea5e3cb\"},\"displayName\":\"Prepare Account\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":1094,\"y\":196.015625},\"af9a8a68-571a-4434-9b3d-bc84e4ec6fb6\":{\"connections\":{\"false\":\"5a52a154-9bc9-461a-aee2-85e9cfb34fd9\",\"true\":\"029c508c-2c37-47b5-842d-6a914106995b\"},\"displayName\":\"Already verified?\",\"nodeType\":\"AttributeValueDecisionNode\",\"x\":627.15625,\"y\":344.015625},\"b5ca1e74-ee28-45ef-95ee-bf53e1ead142\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Verify Applicant\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":1553,\"y\":125.015625},\"d31ee3a0-9b8d-4f72-9037-deb2eb27268a\":{\"connections\":{\"FAILURE\":\"ed269417-887d-4e6a-9569-ca3cae6f0424\",\"PATCHED\":\"b5ca1e74-ee28-45ef-95ee-bf53e1ead142\"},\"displayName\":\"Update Account\",\"nodeType\":\"PatchObjectNode\",\"x\":1321,\"y\":530.015625},\"ed269417-887d-4e6a-9569-ca3cae6f0424\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Error Updating Account\",\"nodeType\":\"PageNode\",\"x\":1551,\"y\":522.015625}},\"description\":\"Interviewee registration journey with full identity verification\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":54,\"y\":140},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1838,\"y\":351},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"Registration\",\"_rev\":\"1002362847\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"Registration\\\"]\"},\"entryNodeId\":\"0c091c49-f3af-48fb-ac6f-07fba0499dd6\",\"innerTreeOnly\":false,\"nodes\":{\"0c091c49-f3af-48fb-ac6f-07fba0499dd6\":{\"connections\":{\"outcome\":\"6b70de2f-a625-4957-93d9-37005e33e6e1\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":261,\"y\":168},\"6b70de2f-a625-4957-93d9-37005e33e6e1\":{\"connections\":{\"outcome\":\"ad5dcbb3-7335-49b7-b3e7-7d850bb88237\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":509,\"y\":305.015625},\"97a15eb2-a015-4b6d-81a0-be78c3aa1a3b\":{\"connections\":{\"outcome\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Increment Login Count\",\"nodeType\":\"IncrementLoginCountNode\",\"x\":895,\"y\":220},\"ad5dcbb3-7335-49b7-b3e7-7d850bb88237\":{\"connections\":{\"CREATED\":\"97a15eb2-a015-4b6d-81a0-be78c3aa1a3b\",\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Create Object\",\"nodeType\":\"CreateObjectNode\",\"x\":751,\"y\":282}},\"description\":\"Platform Registration Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1119,\"y\":247},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":955,\"y\":369},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"ProgressiveProfile\",\"_rev\":\"-1028934999\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"Progressive Profile\\\"]\"},\"entryNodeId\":\"8afdaec3-275e-4301-bb53-34f03e6a4b29\",\"innerTreeOnly\":false,\"nodes\":{\"423a959a-a1b9-498a-b0f7-596b6b6e775a\":{\"connections\":{\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"PATCHED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Patch Object\",\"nodeType\":\"PatchObjectNode\",\"x\":766,\"y\":36},\"8afdaec3-275e-4301-bb53-34f03e6a4b29\":{\"connections\":{\"false\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"true\":\"a1f45b44-5bf7-4c57-aa3f-75c619c7db8e\"},\"displayName\":\"Login Count Decision\",\"nodeType\":\"LoginCountDecisionNode\",\"x\":152,\"y\":36},\"a1f45b44-5bf7-4c57-aa3f-75c619c7db8e\":{\"connections\":{\"false\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"true\":\"a5aecad8-854a-4ed5-b719-ff6c90e858c0\"},\"displayName\":\"Query Filter Decision\",\"nodeType\":\"QueryFilterDecisionNode\",\"x\":357,\"y\":36},\"a5aecad8-854a-4ed5-b719-ff6c90e858c0\":{\"connections\":{\"outcome\":\"423a959a-a1b9-498a-b0f7-596b6b6e775a\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":555,\"y\":20}},\"description\":\"Prompt for missing preferences on 3rd login\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":802,\"y\":312},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":919,\"y\":171},\"startNode\":{\"x\":50,\"y\":58.5}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"IntervieweeSelfieAuthentication\",\"_rev\":\"458768360\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"IDV\\\",\\\"P1 Verify\\\"]\"},\"entryNodeId\":\"a5ad6592-b37a-43fb-9202-117f6ef7b1c2\",\"innerTreeOnly\":false,\"nodes\":{\"290f65ae-de1a-40be-9c3c-c0174decb0a2\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"91afb28b-6cb6-4bc4-b781-5802f7570da0\"},\"displayName\":\"Find Interviewee\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":614,\"y\":189},\"67f33640-a333-4172-8339-2346d873627c\":{\"connections\":{\"FAILURE\":\"70f2653c-66e7-4787-96d1-6c56b0ffc9fd\",\"PATCHED\":\"98b783bd-e27d-4343-90bb-dc6cb6433347\"},\"displayName\":\"Update Account\",\"nodeType\":\"PatchObjectNode\",\"x\":1119,\"y\":151.015625},\"6b761fcb-3f19-489d-8273-0c2e6b49faca\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Cancel Dialog\",\"nodeType\":\"PageNode\",\"x\":1561,\"y\":292.015625},\"70f2653c-66e7-4787-96d1-6c56b0ffc9fd\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Error Dialog\",\"nodeType\":\"PageNode\",\"x\":1564,\"y\":653.015625},\"7f0f546b-4d92-4450-9e0d-fc07830ea3db\":{\"connections\":{\"true\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Success Dialog\",\"nodeType\":\"PageNode\",\"x\":1562,\"y\":84.015625},\"91afb28b-6cb6-4bc4-b781-5802f7570da0\":{\"connections\":{\"CANCEL\":\"6b761fcb-3f19-489d-8273-0c2e6b49faca\",\"ERROR\":\"70f2653c-66e7-4787-96d1-6c56b0ffc9fd\",\"FAIL\":\"96e7155e-be3d-4f15-8c50-8a299e0d68ce\",\"FAILPATCH\":\"96e7155e-be3d-4f15-8c50-8a299e0d68ce\",\"SUCCESPATCH\":\"67f33640-a333-4172-8339-2346d873627c\",\"SUCCESS\":\"67f33640-a333-4172-8339-2346d873627c\"},\"displayName\":\"AuthN Interviewee\",\"nodeType\":\"PageNode\",\"x\":842,\"y\":117.015625},\"96e7155e-be3d-4f15-8c50-8a299e0d68ce\":{\"connections\":{\"false\":\"d801bc95-03d6-4733-ae64-6270d56cd1ff\",\"true\":\"d801bc95-03d6-4733-ae64-6270d56cd1ff\"},\"displayName\":\"Stop Screen Share\",\"nodeType\":\"PageNode\",\"x\":1344,\"y\":448.015625},\"98b783bd-e27d-4343-90bb-dc6cb6433347\":{\"connections\":{\"false\":\"7f0f546b-4d92-4450-9e0d-fc07830ea3db\",\"true\":\"7f0f546b-4d92-4450-9e0d-fc07830ea3db\"},\"displayName\":\"Stop Screen Share\",\"nodeType\":\"PageNode\",\"x\":1336,\"y\":86.015625},\"a5ad6592-b37a-43fb-9202-117f6ef7b1c2\":{\"connections\":{\"known\":\"290f65ae-de1a-40be-9c3c-c0174decb0a2\",\"unknown\":\"bb782509-821a-4dfb-ae28-52c3cf0ba52e\"},\"displayName\":\"Check username\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":183,\"y\":184.015625},\"bb782509-821a-4dfb-ae28-52c3cf0ba52e\":{\"connections\":{\"outcome\":\"290f65ae-de1a-40be-9c3c-c0174decb0a2\"},\"displayName\":\"Select Interviewee\",\"nodeType\":\"PageNode\",\"x\":383,\"y\":295.015625},\"d801bc95-03d6-4733-ae64-6270d56cd1ff\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Failed Dialog\",\"nodeType\":\"PageNode\",\"x\":1563,\"y\":447.015625}},\"description\":\"Interviewee selfie authentication\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1827,\"y\":47},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1830,\"y\":635},\"startNode\":{\"x\":60,\"y\":202}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"ForgottenUsername\",\"_rev\":\"161495250\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"Username Reset\\\"]\"},\"entryNodeId\":\"5e2a7c95-94af-4b23-8724-deb13853726a\",\"innerTreeOnly\":false,\"nodes\":{\"5e2a7c95-94af-4b23-8724-deb13853726a\":{\"connections\":{\"outcome\":\"bf9ea8d5-9802-4f26-9664-a21840faac23\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":139,\"y\":146},\"b93ce36e-1976-4610-b24f-8d6760b5463b\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Inner Tree Evaluator\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":767,\"y\":188},\"bf9ea8d5-9802-4f26-9664-a21840faac23\":{\"connections\":{\"false\":\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\",\"true\":\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\"},\"displayName\":\"Identify Existing User\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":324,\"y\":152},\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\":{\"connections\":{\"outcome\":\"b93ce36e-1976-4610-b24f-8d6760b5463b\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":563,\"y\":193}},\"description\":\"Forgotten Username Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":970,\"y\":149},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":982,\"y\":252},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"UpdatePassword\",\"_rev\":\"1686140325\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"Password Reset\\\"]\"},\"entryNodeId\":\"d1b79744-493a-44fe-bc26-7d324a8caa4e\",\"innerTreeOnly\":false,\"nodes\":{\"0f0904e6-1da3-4cdb-9abf-0d2545016fab\":{\"connections\":{\"false\":\"a3d97b53-e38a-4b24-aed0-a021050eb744\",\"true\":\"20237b34-26cb-4a0b-958f-abb422290d42\"},\"displayName\":\"Attribute Present Decision\",\"nodeType\":\"AttributePresentDecisionNode\",\"x\":288,\"y\":133},\"20237b34-26cb-4a0b-958f-abb422290d42\":{\"connections\":{\"outcome\":\"7d1deabe-cd98-49c8-943f-ca12305775f3\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":526,\"y\":46},\"3990ce1f-cce6-435b-ae1c-f138e89411c1\":{\"connections\":{\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"PATCHED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Patch Object\",\"nodeType\":\"PatchObjectNode\",\"x\":1062,\"y\":189},\"7d1deabe-cd98-49c8-943f-ca12305775f3\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\"},\"displayName\":\"Data Store Decision\",\"nodeType\":\"DataStoreDecisionNode\",\"x\":722,\"y\":45},\"a3d97b53-e38a-4b24-aed0-a021050eb744\":{\"connections\":{\"outcome\":\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":659,\"y\":223},\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\":{\"connections\":{\"outcome\":\"3990ce1f-cce6-435b-ae1c-f138e89411c1\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":943,\"y\":30},\"d1b79744-493a-44fe-bc26-7d324a8caa4e\":{\"connections\":{\"outcome\":\"0f0904e6-1da3-4cdb-9abf-0d2545016fab\"},\"displayName\":\"Get Session Data\",\"nodeType\":\"SessionDataNode\",\"x\":122,\"y\":129}},\"description\":\"Update password using active session\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1212,\"y\":128},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":939,\"y\":290},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"Login\",\"_rev\":\"-550824128\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"Authentication\\\"]\"},\"entryNodeId\":\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\",\"innerTreeOnly\":false,\"nodes\":{\"33b24514-3e50-4180-8f08-ab6f4e51b07e\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Inner Tree Evaluator\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":987,\"y\":117},\"76b5e15c-493c-47dc-b813-01cbc74c5a85\":{\"connections\":{\"outcome\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Account Lockout\",\"nodeType\":\"AccountLockoutNode\",\"x\":1035,\"y\":278.015625},\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\":{\"connections\":{\"outcome\":\"a30b1258-4c35-4ebe-90f3-c11fced9b1e4\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":136,\"y\":59},\"a30b1258-4c35-4ebe-90f3-c11fced9b1e4\":{\"connections\":{\"CANCELLED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"EXPIRED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"FALSE\":\"feecdfb1-386c-423f-b4a0-05cf6b05f783\",\"LOCKED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"TRUE\":\"bba3e0d8-8525-4e82-bf48-ac17f7988917\"},\"displayName\":\"Identity Store Decision\",\"nodeType\":\"IdentityStoreDecisionNode\",\"x\":409,\"y\":120.015625},\"bba3e0d8-8525-4e82-bf48-ac17f7988917\":{\"connections\":{\"outcome\":\"33b24514-3e50-4180-8f08-ab6f4e51b07e\"},\"displayName\":\"Increment Login Count\",\"nodeType\":\"IncrementLoginCountNode\",\"x\":690,\"y\":99},\"feecdfb1-386c-423f-b4a0-05cf6b05f783\":{\"connections\":{\"Reject\":\"76b5e15c-493c-47dc-b813-01cbc74c5a85\",\"Retry\":\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\"},\"displayName\":\"Retry Limit Decision\",\"nodeType\":\"RetryLimitDecisionNode\",\"x\":739,\"y\":219.015625}},\"description\":\"Platform Login Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1239,\"y\":178},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1198,\"y\":351},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true},{\"_id\":\"FullVerificationResult\",\"_rev\":\"-2082210208\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"IDV\\\",\\\"P1 Verify\\\"]\"},\"entryNodeId\":\"cbce5b49-d75d-440a-92e1-6d76290046bf\",\"innerTreeOnly\":false,\"nodes\":{\"43bd2a51-06e5-4f77-a239-0ae14d0f903e\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"a668ff0a-12cc-4b0f-8e34-1ef75a70cc7d\"},\"displayName\":\"Identify Existing User\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":645,\"y\":133.015625},\"75cd0cc5-dae5-4289-b160-bae08c5f24af\":{\"connections\":{\"outcome\":\"43bd2a51-06e5-4f77-a239-0ae14d0f903e\"},\"displayName\":\"Email\",\"nodeType\":\"PageNode\",\"x\":411,\"y\":312.015625},\"a668ff0a-12cc-4b0f-8e34-1ef75a70cc7d\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Result Dialog\",\"nodeType\":\"PageNode\",\"x\":886,\"y\":100.015625},\"cbce5b49-d75d-440a-92e1-6d76290046bf\":{\"connections\":{\"known\":\"43bd2a51-06e5-4f77-a239-0ae14d0f903e\",\"unknown\":\"75cd0cc5-dae5-4289-b160-bae08c5f24af\"},\"displayName\":\"Check username\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":177,\"y\":231.015625}},\"description\":\"Display full verification result.\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":54,\"y\":148},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1111,\"y\":307},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}],\"resultCount\":10,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0, resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 800, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.589Z", - "time": 57, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 57 - } - }, - { - "_id": "0dbd1c4183aa95189645288779c14fa3", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2047, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/trees/ForgottenUsername" - }, - "response": { - "bodySize": 1288, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1288, - "text": "{\"_id\":\"ForgottenUsername\",\"_rev\":\"161495250\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"Username Reset\\\"]\"},\"entryNodeId\":\"5e2a7c95-94af-4b23-8724-deb13853726a\",\"innerTreeOnly\":false,\"nodes\":{\"5e2a7c95-94af-4b23-8724-deb13853726a\":{\"connections\":{\"outcome\":\"bf9ea8d5-9802-4f26-9664-a21840faac23\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":139,\"y\":146},\"b93ce36e-1976-4610-b24f-8d6760b5463b\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Inner Tree Evaluator\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":767,\"y\":188},\"bf9ea8d5-9802-4f26-9664-a21840faac23\":{\"connections\":{\"false\":\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\",\"true\":\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\"},\"displayName\":\"Identify Existing User\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":324,\"y\":152},\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\":{\"connections\":{\"outcome\":\"b93ce36e-1976-4610-b24f-8d6760b5463b\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":563,\"y\":193}},\"description\":\"Forgotten Username Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":970,\"y\":149},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":982,\"y\":252},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"161495250\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1288" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.652Z", - "time": 58, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 58 - } - }, - { - "_id": "31c2525ad82cf94be8f4f9242cbc999b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/5e2a7c95-94af-4b23-8724-deb13853726a" - }, - "response": { - "bodySize": 451, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 451, - "text": "{\"_id\":\"5e2a7c95-94af-4b23-8724-deb13853726a\",\"_rev\":\"-1421046051\",\"nodes\":[{\"_id\":\"9f1e8d94-4922-481b-9e14-212b66548900\",\"nodeType\":\"AttributeCollectorNode\",\"displayName\":\"Attribute Collector\"}],\"pageDescription\":{\"en\":\"Enter your email address or Sign in\"},\"pageHeader\":{\"en\":\"Forgotten Username\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1421046051\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "451" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:11 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.718Z", - "time": 501, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 501 - } - }, - { - "_id": "9b070a4d74efedc99298c459cf64890b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/b93ce36e-1976-4610-b24f-8d6760b5463b" - }, - "response": { - "bodySize": 256, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 256, - "text": "{\"_id\":\"b93ce36e-1976-4610-b24f-8d6760b5463b\",\"_rev\":\"1389809903\",\"tree\":\"Login\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1389809903\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "256" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.719Z", - "time": 275, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 275 - } - }, - { - "_id": "221f701768d954f193374e3e3c58f380", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2091, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/IdentifyExistingUserNode/bf9ea8d5-9802-4f26-9664-a21840faac23" - }, - "response": { - "bodySize": 296, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 296, - "text": "{\"_id\":\"bf9ea8d5-9802-4f26-9664-a21840faac23\",\"_rev\":\"-626658673\",\"identityAttribute\":\"mail\",\"identifier\":\"userName\",\"_type\":{\"_id\":\"IdentifyExistingUserNode\",\"name\":\"Identify Existing User\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-626658673\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "296" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.720Z", - "time": 215, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 215 - } - }, - { - "_id": "124d63dbe5fd0b16442b7d457a54dfbe", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2083, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/EmailSuspendNode/d9a79f01-2ce3-4be2-a28a-975f35c3c8ca" - }, - "response": { - "bodySize": 436, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 436, - "text": "{\"_id\":\"d9a79f01-2ce3-4be2-a28a-975f35c3c8ca\",\"_rev\":\"2035832000\",\"emailSuspendMessage\":{\"en\":\"An email has been sent to the address you entered. Click the link in that email to proceed.\"},\"emailTemplateName\":\"forgottenUsername\",\"identityAttribute\":\"mail\",\"emailAttribute\":\"mail\",\"objectLookup\":true,\"_type\":{\"_id\":\"EmailSuspendNode\",\"name\":\"Email Suspend Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"2035832000\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "436" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:10 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:10.721Z", - "time": 196, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 196 - } - }, - { - "_id": "aec861f26fe4afcd708165922c6c2685", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/AttributeCollectorNode/9f1e8d94-4922-481b-9e14-212b66548900" - }, - "response": { - "bodySize": 307, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 307, - "text": "{\"_id\":\"9f1e8d94-4922-481b-9e14-212b66548900\",\"_rev\":\"-1331445210\",\"attributesToCollect\":[\"mail\"],\"identityAttribute\":\"mail\",\"validateInputs\":false,\"required\":true,\"_type\":{\"_id\":\"AttributeCollectorNode\",\"name\":\"Attribute Collector\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1331445210\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "307" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:11 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:11.233Z", - "time": 137, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 137 - } - }, - { - "_id": "e074d00f2d64858731c32ce1e9a49ef2", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2052, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/trees/FullVerificationResult" - }, - "response": { - "bodySize": 1312, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1312, - "text": "{\"_id\":\"FullVerificationResult\",\"_rev\":\"-2082210208\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"IDV\\\",\\\"P1 Verify\\\"]\"},\"entryNodeId\":\"cbce5b49-d75d-440a-92e1-6d76290046bf\",\"innerTreeOnly\":false,\"nodes\":{\"43bd2a51-06e5-4f77-a239-0ae14d0f903e\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"a668ff0a-12cc-4b0f-8e34-1ef75a70cc7d\"},\"displayName\":\"Identify Existing User\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":645,\"y\":133.015625},\"75cd0cc5-dae5-4289-b160-bae08c5f24af\":{\"connections\":{\"outcome\":\"43bd2a51-06e5-4f77-a239-0ae14d0f903e\"},\"displayName\":\"Email\",\"nodeType\":\"PageNode\",\"x\":411,\"y\":312.015625},\"a668ff0a-12cc-4b0f-8e34-1ef75a70cc7d\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Result Dialog\",\"nodeType\":\"PageNode\",\"x\":886,\"y\":100.015625},\"cbce5b49-d75d-440a-92e1-6d76290046bf\":{\"connections\":{\"known\":\"43bd2a51-06e5-4f77-a239-0ae14d0f903e\",\"unknown\":\"75cd0cc5-dae5-4289-b160-bae08c5f24af\"},\"displayName\":\"Check username\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":177,\"y\":231.015625}},\"description\":\"Display full verification result.\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":54,\"y\":148},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1111,\"y\":307},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-2082210208\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1312" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:11 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 788, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:11.381Z", - "time": 58, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 58 - } - }, - { - "_id": "3eae14cdd62b19a64df66ee88853d3a3", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2091, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/IdentifyExistingUserNode/43bd2a51-06e5-4f77-a239-0ae14d0f903e" - }, - "response": { - "bodySize": 295, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 295, - "text": "{\"_id\":\"43bd2a51-06e5-4f77-a239-0ae14d0f903e\",\"_rev\":\"956270392\",\"identityAttribute\":\"mail\",\"identifier\":\"userName\",\"_type\":{\"_id\":\"IdentifyExistingUserNode\",\"name\":\"Identify Existing User\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"956270392\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "295" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:11 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:11.446Z", - "time": 84, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 84 - } - }, - { - "_id": "f5fbe7201530d3c123c99a215fb86164", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/75cd0cc5-dae5-4289-b160-bae08c5f24af" - }, - "response": { - "bodySize": 337, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 337, - "text": "{\"_id\":\"75cd0cc5-dae5-4289-b160-bae08c5f24af\",\"_rev\":\"-382647302\",\"nodes\":[{\"_id\":\"da8218d8-0226-432c-abe5-d4518e06fce8\",\"nodeType\":\"AttributeCollectorNode\",\"displayName\":\"Email\"}],\"pageDescription\":{},\"pageHeader\":{},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-382647302\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "337" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:11 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:11.450Z", - "time": 78, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 78 - } - }, - { - "_id": "23ff6b809276546347e480f6e8484703", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/a668ff0a-12cc-4b0f-8e34-1ef75a70cc7d" - }, - "response": { - "bodySize": 477, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 477, - "text": "{\"_id\":\"a668ff0a-12cc-4b0f-8e34-1ef75a70cc7d\",\"_rev\":\"1289082510\",\"nodes\":[{\"_id\":\"5d32ece5-bf1d-4b3a-a0e5-e47867334112\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Results\"},{\"_id\":\"c1f34309-1be3-4fd8-8c7d-8f027a91bb46\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Remove Button\"}],\"pageDescription\":{},\"pageHeader\":{\"en\":\"Identity Verification Result\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1289082510\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "477" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:11 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:11.452Z", - "time": 72, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 72 - } - }, - { - "_id": "5a696cf54f2035dc5fdb909ffb57fe07", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/cbce5b49-d75d-440a-92e1-6d76290046bf" - }, - "response": { - "bodySize": 352, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 352, - "text": "{\"_id\":\"cbce5b49-d75d-440a-92e1-6d76290046bf\",\"_rev\":\"-783727962\",\"script\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"outcomes\":[\"known\",\"unknown\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"known\",\"displayName\":\"known\"},{\"id\":\"unknown\",\"displayName\":\"unknown\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-783727962\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "352" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:11 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:11.454Z", - "time": 373, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 373 - } - }, - { - "_id": "910deec9eb77ba7f73f9cd111161024b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/AttributeCollectorNode/da8218d8-0226-432c-abe5-d4518e06fce8" - }, - "response": { - "bodySize": 309, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 309, - "text": "{\"_id\":\"da8218d8-0226-432c-abe5-d4518e06fce8\",\"_rev\":\"1425567817\",\"attributesToCollect\":[\"mail\"],\"identityAttribute\":\"userName\",\"validateInputs\":true,\"required\":true,\"_type\":{\"_id\":\"AttributeCollectorNode\",\"name\":\"Attribute Collector\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1425567817\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "309" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:11 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:11.838Z", - "time": 71, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 71 - } - }, - { - "_id": "6fdd15798bcd2cd356cc6bdf232e8c03", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/5d32ece5-bf1d-4b3a-a0e5-e47867334112" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"5d32ece5-bf1d-4b3a-a0e5-e47867334112\",\"_rev\":\"-1880025452\",\"script\":\"ca0c39c5-9c50-417f-a36e-815cfd1ecffe\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1880025452\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:11 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:11.840Z", - "time": 76, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 76 - } - }, - { - "_id": "20c87a4b1bc3aaa4e3851d1cba204ed0", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/c1f34309-1be3-4fd8-8c7d-8f027a91bb46" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"c1f34309-1be3-4fd8-8c7d-8f027a91bb46\",\"_rev\":\"108853207\",\"script\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"108853207\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:11 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:11.842Z", - "time": 64, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 64 - } - }, - { - "_id": "dabe8f6de3311e34733b594bd15f4d2f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2057, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/trees/IntervieweeFullVerification" - }, - "response": { - "bodySize": 4793, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 4793, - "text": "{\"_id\":\"IntervieweeFullVerification\",\"_rev\":\"1102600689\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"IDV\\\",\\\"P1 Verify\\\"]\"},\"entryNodeId\":\"4b19c2c8-26be-4cc7-91f8-722d87142521\",\"innerTreeOnly\":false,\"nodes\":{\"12f631e5-4a0f-41bd-9eea-ddbdfc4ceefc\":{\"connections\":{\"200\":\"986e0137-fe9f-4e2a-b37f-21bd13fbe6ce\",\"ERROR\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\",\"NOMATCHRESPONSE\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\"},\"displayName\":\"Get Verify Data\",\"nodeType\":\"RESTNode\",\"x\":812,\"y\":396.015625},\"1c08a0f6-d9bb-4bb9-970f-c5941d6c8d9a\":{\"connections\":{\"true\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Success Dialog\",\"nodeType\":\"PageNode\",\"x\":1479,\"y\":53.015625},\"1c8fb336-8d51-466c-933b-635c5b00365a\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Cancel Dialog\",\"nodeType\":\"PageNode\",\"x\":1480,\"y\":244.015625},\"25c5fa53-3369-441a-bbc8-4fe8c0f2c2a1\":{\"connections\":{\"true\":\"1c08a0f6-d9bb-4bb9-970f-c5941d6c8d9a\"},\"displayName\":\"Debug\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":1258,\"y\":244.015625},\"2e801ab7-5412-4388-990b-84070f130994\":{\"connections\":{\"CANCEL\":\"1c8fb336-8d51-466c-933b-635c5b00365a\",\"ERROR\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\",\"FAIL\":\"12f631e5-4a0f-41bd-9eea-ddbdfc4ceefc\",\"FAILPATCH\":\"12f631e5-4a0f-41bd-9eea-ddbdfc4ceefc\",\"SUCCESPATCH\":\"e8efdd39-8cb8-4bff-a2bf-c9decd805252\",\"SUCCESS\":\"e8efdd39-8cb8-4bff-a2bf-c9decd805252\"},\"displayName\":\"ID Proof Interviewee\",\"nodeType\":\"PageNode\",\"x\":554,\"y\":151.015625},\"4885ef18-2a01-48bf-9b35-cda88b348e71\":{\"connections\":{\"outcome\":\"798d799c-2a12-4af1-a611-9ffa5f694303\"},\"displayName\":\"DEMO ONLY!!!\",\"nodeType\":\"PageNode\",\"x\":165,\"y\":527.015625},\"4b19c2c8-26be-4cc7-91f8-722d87142521\":{\"connections\":{\"known\":\"c37589da-c897-417f-8afa-74a3b130042a\",\"unknown\":\"4885ef18-2a01-48bf-9b35-cda88b348e71\"},\"displayName\":\"Check Username\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":165,\"y\":229.015625},\"4b4cc53a-4d3a-4fb4-9815-1b65d970efc3\":{\"connections\":{\"true\":\"859c73ff-f04e-42e5-91f5-9ca908c289bb\"},\"displayName\":\"Debug\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":1273,\"y\":601.015625},\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Error Dialog\",\"nodeType\":\"PageNode\",\"x\":1480,\"y\":573.015625},\"737a2e1a-008a-45da-bb1a-176b7ccc5230\":{\"connections\":{\"false\":\"1c08a0f6-d9bb-4bb9-970f-c5941d6c8d9a\",\"true\":\"1c08a0f6-d9bb-4bb9-970f-c5941d6c8d9a\"},\"displayName\":\"Stop Screen Share\",\"nodeType\":\"PageNode\",\"x\":1248,\"y\":54.015625},\"798d799c-2a12-4af1-a611-9ffa5f694303\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"4b19c2c8-26be-4cc7-91f8-722d87142521\"},\"displayName\":\"Identify Existing User\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":492,\"y\":531.015625},\"7b3211a0-debc-465f-bc81-f530458127c8\":{\"connections\":{\"false\":\"859c73ff-f04e-42e5-91f5-9ca908c289bb\",\"true\":\"859c73ff-f04e-42e5-91f5-9ca908c289bb\"},\"displayName\":\"Stop Screen Share\",\"nodeType\":\"PageNode\",\"x\":1250,\"y\":381.015625},\"859c73ff-f04e-42e5-91f5-9ca908c289bb\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Failure Dialog\",\"nodeType\":\"PageNode\",\"x\":1477,\"y\":379.015625},\"8b6a4da7-d6eb-47cb-bb65-84757cdb1888\":{\"connections\":{\"FAILURE\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\",\"PATCHED\":\"737a2e1a-008a-45da-bb1a-176b7ccc5230\"},\"displayName\":\"Update Account\",\"nodeType\":\"PatchObjectNode\",\"x\":1040,\"y\":124.015625},\"986e0137-fe9f-4e2a-b37f-21bd13fbe6ce\":{\"connections\":{\"true\":\"bbd56ddb-17de-4e73-b61c-856301637712\"},\"displayName\":\"Prepare Update\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":1037,\"y\":370.015625},\"bbd56ddb-17de-4e73-b61c-856301637712\":{\"connections\":{\"FAILURE\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\",\"PATCHED\":\"7b3211a0-debc-465f-bc81-f530458127c8\"},\"displayName\":\"Update Account\",\"nodeType\":\"PatchObjectNode\",\"x\":1038,\"y\":451.015625},\"bf42cd1b-23e2-4f0d-9370-3299b2f39086\":{\"connections\":{\"true\":\"8b6a4da7-d6eb-47cb-bb65-84757cdb1888\"},\"displayName\":\"Prepare Update\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":1039,\"y\":42.015625},\"c37589da-c897-417f-8afa-74a3b130042a\":{\"connections\":{\"false\":\"798d799c-2a12-4af1-a611-9ffa5f694303\",\"true\":\"2e801ab7-5412-4388-990b-84070f130994\"},\"displayName\":\"Username resolved?\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":355,\"y\":231.015625},\"e8efdd39-8cb8-4bff-a2bf-c9decd805252\":{\"connections\":{\"200\":\"bf42cd1b-23e2-4f0d-9370-3299b2f39086\",\"ERROR\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\",\"NOMATCHRESPONSE\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\"},\"displayName\":\"Get Verify Data\",\"nodeType\":\"RESTNode\",\"x\":807,\"y\":69.015625}},\"description\":\"Interviewee full identity verification\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1735,\"y\":36},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1741,\"y\":642},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1102600689\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "4793" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:11 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:11.922Z", - "time": 64, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 64 - } - }, - { - "_id": "ef91d465d6d556a031a700d356e6ab4f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/RESTNode/12f631e5-4a0f-41bd-9eea-ddbdfc4ceefc" - }, - "response": { - "bodySize": 943, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 943, - "text": "{\"_id\":\"12f631e5-4a0f-41bd-9eea-ddbdfc4ceefc\",\"_rev\":\"-325518769\",\"restURL\":\"${VerifyMetadataResult.$._links.verifyTransaction.href}/verifiedData\",\"statusCodeReturn\":\"getSelfieStatus\",\"bodyType\":\"JSON\",\"queryParamsMap\":{\"type\":\"SELFIE,CROPPED_PORTRAIT\"},\"basicAuthn\":false,\"privateKey\":\"-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\",\"jpToSSMapper\":{\"croppedPortraitBase64\":\"$._embedded.verifiedData[1].data.IMAGE\",\"selfieBase64\":\"$._embedded.verifiedData[0].data.IMAGE\"},\"requestMode\":\"GET\",\"disableCertChecks\":false,\"usemTLS\":false,\"headersMap\":{\"Authorization\":\"Bearer ${VerifyAT}\"},\"jpToOutcomeMapper\":{},\"publicCert\":\"-----BEGIN CERTIFICATE-----\\n...\\n-----END CERTIFICATE-----\",\"timeout\":30,\"responseCodes\":[\"200\"],\"_type\":{\"_id\":\"RESTNode\",\"name\":\"HTTP Client\",\"collection\":true},\"_outcomes\":[{\"id\":\"200\",\"displayName\":\"200\"},{\"id\":\"NOMATCHRESPONSE\",\"displayName\":\"Default Response\"},{\"id\":\"ERROR\",\"displayName\":\"Error\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-325518769\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "943" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.003Z", - "time": 149, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 149 - } - }, - { - "_id": "a0b38139efd666b43e5b4246d766f110", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/1c08a0f6-d9bb-4bb9-970f-c5941d6c8d9a" - }, - "response": { - "bodySize": 481, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 481, - "text": "{\"_id\":\"1c08a0f6-d9bb-4bb9-970f-c5941d6c8d9a\",\"_rev\":\"1411874953\",\"nodes\":[{\"_id\":\"f764adf0-e71b-4780-990b-fe2906d6994a\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Results\"},{\"_id\":\"41df2127-ff5d-4ff2-9971-04ff669145b5\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Remove Button\"}],\"pageDescription\":{},\"pageHeader\":{\"en\":\"Identity Verification Successful\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1411874953\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "481" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.004Z", - "time": 82, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 82 - } - }, - { - "_id": "f0691e6791ee9efa805b97341137a1a5", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/1c8fb336-8d51-466c-933b-635c5b00365a" - }, - "response": { - "bodySize": 374, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 374, - "text": "{\"_id\":\"1c8fb336-8d51-466c-933b-635c5b00365a\",\"_rev\":\"-353702425\",\"nodes\":[{\"_id\":\"d81c68ab-f20d-4372-8f48-70766093e237\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Remove Button\"}],\"pageDescription\":{},\"pageHeader\":{\"en\":\"Identity Verification Canceled\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-353702425\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "374" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.006Z", - "time": 73, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 73 - } - }, - { - "_id": "f5623318a30775c32032136a05590bf6", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/25c5fa53-3369-441a-bbc8-4fe8c0f2c2a1" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"25c5fa53-3369-441a-bbc8-4fe8c0f2c2a1\",\"_rev\":\"-231434689\",\"script\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-231434689\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.008Z", - "time": 69, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 69 - } - }, - { - "_id": "e29cdd1ec66ab3ee08e27b8438f13c8b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/2e801ab7-5412-4388-990b-84070f130994" - }, - "response": { - "bodySize": 764, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 764, - "text": "{\"_id\":\"2e801ab7-5412-4388-990b-84070f130994\",\"_rev\":\"407723514\",\"nodes\":[{\"_id\":\"1895ec19-f7ca-45b4-ae9b-20946e7183ef\",\"nodeType\":\"PingOneVerifyProofing\",\"displayName\":\"PingOne Verify Proofing\"}],\"pageDescription\":{\"en\":\"Please choose how to delegate the document and selfie capturing step to the interviewee. If you choose QR, share your screen via zoom and have the interviewee scan it, then stop sharing.\"},\"pageHeader\":{},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"SUCCESS\",\"displayName\":\"Success\"},{\"id\":\"SUCCESPATCH\",\"displayName\":\"Success (Patch ID)\"},{\"id\":\"FAIL\",\"displayName\":\"Fail\"},{\"id\":\"FAILPATCH\",\"displayName\":\"Fail (Patch ID)\"},{\"id\":\"CANCEL\",\"displayName\":\"Cancel\"},{\"id\":\"ERROR\",\"displayName\":\"Error\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"407723514\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "764" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.011Z", - "time": 93, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 93 - } - }, - { - "_id": "d9e3464a8e1a931f62b4d79fd7462754", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/4885ef18-2a01-48bf-9b35-cda88b348e71" - }, - "response": { - "bodySize": 337, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 337, - "text": "{\"_id\":\"4885ef18-2a01-48bf-9b35-cda88b348e71\",\"_rev\":\"-515721755\",\"nodes\":[{\"_id\":\"04547a28-07b1-4b22-9bcd-234fc327038a\",\"nodeType\":\"AttributeCollectorNode\",\"displayName\":\"Email\"}],\"pageDescription\":{},\"pageHeader\":{},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-515721755\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "337" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.012Z", - "time": 94, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 94 - } - }, - { - "_id": "c33ef84631b92d2bb9c14cb991b4d006", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/4b19c2c8-26be-4cc7-91f8-722d87142521" - }, - "response": { - "bodySize": 353, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 353, - "text": "{\"_id\":\"4b19c2c8-26be-4cc7-91f8-722d87142521\",\"_rev\":\"-1499195584\",\"script\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"outcomes\":[\"known\",\"unknown\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"known\",\"displayName\":\"known\"},{\"id\":\"unknown\",\"displayName\":\"unknown\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1499195584\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "353" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.014Z", - "time": 91, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 91 - } - }, - { - "_id": "7fb820d80f1ed2533884b3c5a24cb474", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/4b4cc53a-4d3a-4fb4-9815-1b65d970efc3" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"4b4cc53a-4d3a-4fb4-9815-1b65d970efc3\",\"_rev\":\"1825168507\",\"script\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1825168507\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.018Z", - "time": 91, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 91 - } - }, - { - "_id": "5da59ca563f8903e0f345f384ab3953a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/69e2fa6d-e18b-4661-86be-dbfefc311fc7" - }, - "response": { - "bodySize": 474, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 474, - "text": "{\"_id\":\"69e2fa6d-e18b-4661-86be-dbfefc311fc7\",\"_rev\":\"-882451986\",\"nodes\":[{\"_id\":\"a5fb1aa6-15fb-4251-93af-e9f86d99ac78\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Debug\"},{\"_id\":\"24ea2978-9aa2-4be2-ae68-69ba1c60bdbf\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Remove Button\"}],\"pageDescription\":{},\"pageHeader\":{\"en\":\"Identity Verification Error\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-882451986\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "474" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.020Z", - "time": 93, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 93 - } - }, - { - "_id": "17f9746d8a2f05ede0c3a36817542322", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/737a2e1a-008a-45da-bb1a-176b7ccc5230" - }, - "response": { - "bodySize": 507, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 507, - "text": "{\"_id\":\"737a2e1a-008a-45da-bb1a-176b7ccc5230\",\"_rev\":\"1003698205\",\"nodes\":[{\"_id\":\"19eb6cc1-d604-4bc1-a368-9505776477ba\",\"nodeType\":\"MessageNode\",\"displayName\":\"Proceed?\"}],\"pageDescription\":{},\"stage\":\"{\\\"ConfirmationCallback\\\":[{\\\"id\\\":\\\"19eb6cc1-d604-4bc1-a368-9505776477ba\\\",\\\"showOnlyPositiveAnswer\\\":true}]}\",\"pageHeader\":{\"en\":\"Stop Screen Sharing\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1003698205\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "507" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.022Z", - "time": 77, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 77 - } - }, - { - "_id": "3caf30dd594e8be0fa2df7836a84afa6", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2091, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/IdentifyExistingUserNode/798d799c-2a12-4af1-a611-9ffa5f694303" - }, - "response": { - "bodySize": 296, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 296, - "text": "{\"_id\":\"798d799c-2a12-4af1-a611-9ffa5f694303\",\"_rev\":\"1718219714\",\"identityAttribute\":\"mail\",\"identifier\":\"userName\",\"_type\":{\"_id\":\"IdentifyExistingUserNode\",\"name\":\"Identify Existing User\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1718219714\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "296" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.023Z", - "time": 170, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 170 - } - }, - { - "_id": "ee25a7064784dc8a74a587556b083595", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/7b3211a0-debc-465f-bc81-f530458127c8" - }, - "response": { - "bodySize": 507, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 507, - "text": "{\"_id\":\"7b3211a0-debc-465f-bc81-f530458127c8\",\"_rev\":\"-139391661\",\"nodes\":[{\"_id\":\"e6bf6cf7-62d2-4498-9db9-727762eb9e81\",\"nodeType\":\"MessageNode\",\"displayName\":\"Proceed?\"}],\"pageDescription\":{},\"stage\":\"{\\\"ConfirmationCallback\\\":[{\\\"id\\\":\\\"e6bf6cf7-62d2-4498-9db9-727762eb9e81\\\",\\\"showOnlyPositiveAnswer\\\":true}]}\",\"pageHeader\":{\"en\":\"Stop Screen Sharing\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-139391661\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "507" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.027Z", - "time": 161, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 161 - } - }, - { - "_id": "f2d08d7c19084b279914cb8615ca747d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/859c73ff-f04e-42e5-91f5-9ca908c289bb" - }, - "response": { - "bodySize": 477, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 477, - "text": "{\"_id\":\"859c73ff-f04e-42e5-91f5-9ca908c289bb\",\"_rev\":\"1456509175\",\"nodes\":[{\"_id\":\"936c098d-bd54-4f05-827c-ed36559518ac\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Results\"},{\"_id\":\"eed23b6a-4f3f-46e1-99fe-9b62de1ac27d\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Remove Button\"}],\"pageDescription\":{},\"pageHeader\":{\"en\":\"Identity Verification Failed\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1456509175\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "477" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.030Z", - "time": 169, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 169 - } - }, - { - "_id": "7a75801b8ab0fb40134d5e16fad7561d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2082, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PatchObjectNode/8b6a4da7-d6eb-47cb-bb65-84757cdb1888" - }, - "response": { - "bodySize": 363, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 363, - "text": "{\"_id\":\"8b6a4da7-d6eb-47cb-bb65-84757cdb1888\",\"_rev\":\"-1709084984\",\"identityResource\":\"managed/bravo_user\",\"patchAsObject\":false,\"ignoredFields\":[\"fr-attr-istr1\"],\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"PatchObjectNode\",\"name\":\"Patch Object\",\"collection\":true},\"_outcomes\":[{\"id\":\"PATCHED\",\"displayName\":\"Patched\"},{\"id\":\"FAILURE\",\"displayName\":\"Failed\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1709084984\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "363" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.033Z", - "time": 294, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 294 - } - }, - { - "_id": "3f1e70190e638218b0119a0525e03bb4", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/986e0137-fe9f-4e2a-b37f-21bd13fbe6ce" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"986e0137-fe9f-4e2a-b37f-21bd13fbe6ce\",\"_rev\":\"613737713\",\"script\":\"4233c093-76a6-474b-ac38-5c0ea1de2484\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"613737713\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.038Z", - "time": 171, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 171 - } - }, - { - "_id": "bd24ab9414c871d89ba171bb5199c181", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2082, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PatchObjectNode/bbd56ddb-17de-4e73-b61c-856301637712" - }, - "response": { - "bodySize": 362, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 362, - "text": "{\"_id\":\"bbd56ddb-17de-4e73-b61c-856301637712\",\"_rev\":\"-868580812\",\"identityResource\":\"managed/bravo_user\",\"patchAsObject\":false,\"ignoredFields\":[\"fr-attr-istr1\"],\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"PatchObjectNode\",\"name\":\"Patch Object\",\"collection\":true},\"_outcomes\":[{\"id\":\"PATCHED\",\"displayName\":\"Patched\"},{\"id\":\"FAILURE\",\"displayName\":\"Failed\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-868580812\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "362" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.041Z", - "time": 284, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 284 - } - }, - { - "_id": "a73c879dedb5035e17a3d4cd2a5acdbd", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/bf42cd1b-23e2-4f0d-9370-3299b2f39086" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"bf42cd1b-23e2-4f0d-9370-3299b2f39086\",\"_rev\":\"-910008898\",\"script\":\"4233c093-76a6-474b-ac38-5c0ea1de2484\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-910008898\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.045Z", - "time": 166, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 166 - } - }, - { - "_id": "c28fdf15e80a435ec605e3f7b60e07bc", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/c37589da-c897-417f-8afa-74a3b130042a" - }, - "response": { - "bodySize": 344, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 344, - "text": "{\"_id\":\"c37589da-c897-417f-8afa-74a3b130042a\",\"_rev\":\"-1051164446\",\"script\":\"ffcfbd20-38d5-4f74-8766-7df90af4dbe4\",\"outcomes\":[\"true\",\"false\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"},{\"id\":\"false\",\"displayName\":\"false\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1051164446\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "344" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.048Z", - "time": 155, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 155 - } - }, - { - "_id": "da6ed65e82cb50d2f40c8f1313761bb8", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/RESTNode/e8efdd39-8cb8-4bff-a2bf-c9decd805252" - }, - "response": { - "bodySize": 944, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 944, - "text": "{\"_id\":\"e8efdd39-8cb8-4bff-a2bf-c9decd805252\",\"_rev\":\"-1670882767\",\"restURL\":\"${VerifyMetadataResult.$._links.verifyTransaction.href}/verifiedData\",\"statusCodeReturn\":\"getSelfieStatus\",\"bodyType\":\"JSON\",\"queryParamsMap\":{\"type\":\"SELFIE,CROPPED_PORTRAIT\"},\"basicAuthn\":false,\"privateKey\":\"-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\",\"jpToSSMapper\":{\"croppedPortraitBase64\":\"$._embedded.verifiedData[1].data.IMAGE\",\"selfieBase64\":\"$._embedded.verifiedData[0].data.IMAGE\"},\"requestMode\":\"GET\",\"disableCertChecks\":false,\"usemTLS\":false,\"headersMap\":{\"Authorization\":\"Bearer ${VerifyAT}\"},\"jpToOutcomeMapper\":{},\"publicCert\":\"-----BEGIN CERTIFICATE-----\\n...\\n-----END CERTIFICATE-----\",\"timeout\":30,\"responseCodes\":[\"200\"],\"_type\":{\"_id\":\"RESTNode\",\"name\":\"HTTP Client\",\"collection\":true},\"_outcomes\":[{\"id\":\"200\",\"displayName\":\"200\"},{\"id\":\"NOMATCHRESPONSE\",\"displayName\":\"Default Response\"},{\"id\":\"ERROR\",\"displayName\":\"Error\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1670882767\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "944" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.052Z", - "time": 161, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 161 - } - }, - { - "_id": "a351b737ee46ff90f15e9827d1a03eb3", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/f764adf0-e71b-4780-990b-fe2906d6994a" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"f764adf0-e71b-4780-990b-fe2906d6994a\",\"_rev\":\"1882961856\",\"script\":\"ca0c39c5-9c50-417f-a36e-815cfd1ecffe\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1882961856\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.338Z", - "time": 148, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 148 - } - }, - { - "_id": "c46aece3683c0e5e5a9511932b0ec781", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/41df2127-ff5d-4ff2-9971-04ff669145b5" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"41df2127-ff5d-4ff2-9971-04ff669145b5\",\"_rev\":\"1760160013\",\"script\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1760160013\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.339Z", - "time": 129, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 129 - } - }, - { - "_id": "316440ddbffcc59ba2f5e32699e0d5f6", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/d81c68ab-f20d-4372-8f48-70766093e237" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"d81c68ab-f20d-4372-8f48-70766093e237\",\"_rev\":\"-1760749617\",\"script\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1760749617\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.340Z", - "time": 147, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 147 - } - }, - { - "_id": "82402f85e00d86489aa1c8dd8fa9c9e3", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PingOneVerifyProofing/1895ec19-f7ca-45b4-ae9b-20946e7183ef" - }, - "response": { - "bodySize": 1157, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1157, - "text": "{\"_id\":\"1895ec19-f7ca-45b4-ae9b-20946e7183ef\",\"_rev\":\"-689125243\",\"saveMetadata\":true,\"tsTransactionId\":true,\"userNotification\":\"QR\",\"tsAccessToken\":true,\"userNotificationChoiceMessage\":\"Invite interviewee via (must complete within 15mins):\",\"demoMode\":false,\"saveVerifiedClaims\":true,\"verifyPolicyId\":\"c005fa90-a658-44f8-b9dc-854c11f1f235\",\"fuzzyMatchingConfiguration\":{\"givenName\":\"MEDIUM\",\"sn\":\"MEDIUM\"},\"failExpired\":false,\"govId\":\"ANY\",\"userIdAttribute\":\"fr-attr-istr1\",\"attributeMappingConfiguration\":{\"custom_verifiedFirstName\":\"firstName\",\"custom_verifiedLastName\":\"lastName\"},\"pollWaitMessage\":\"Waiting for completion. Here is the code you will see on your device: %s\",\"userNotificationChoice\":true,\"dobVerification\":16,\"timeOut\":270,\"tntpPingOneConfigName\":\"p1-volker-dev [/bravo]\",\"_type\":{\"_id\":\"PingOneVerifyProofing\",\"name\":\"PingOne Verify Proofing\",\"collection\":true},\"_outcomes\":[{\"id\":\"SUCCESS\",\"displayName\":\"Success\"},{\"id\":\"SUCCESPATCH\",\"displayName\":\"Success (Patch ID)\"},{\"id\":\"FAIL\",\"displayName\":\"Fail\"},{\"id\":\"FAILPATCH\",\"displayName\":\"Fail (Patch ID)\"},{\"id\":\"CANCEL\",\"displayName\":\"Cancel\"},{\"id\":\"ERROR\",\"displayName\":\"Error\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-689125243\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1157" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.341Z", - "time": 163, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 163 - } - }, - { - "_id": "84b7a638c52cfd4a2f6ba130c05c0c9e", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/AttributeCollectorNode/04547a28-07b1-4b22-9bcd-234fc327038a" - }, - "response": { - "bodySize": 308, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 308, - "text": "{\"_id\":\"04547a28-07b1-4b22-9bcd-234fc327038a\",\"_rev\":\"482232792\",\"attributesToCollect\":[\"mail\"],\"identityAttribute\":\"userName\",\"validateInputs\":true,\"required\":true,\"_type\":{\"_id\":\"AttributeCollectorNode\",\"name\":\"Attribute Collector\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"482232792\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "308" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.343Z", - "time": 136, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 136 - } - }, - { - "_id": "45e3bebc38b97391267bce5daf1ffd97", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/a5fb1aa6-15fb-4251-93af-e9f86d99ac78" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"a5fb1aa6-15fb-4251-93af-e9f86d99ac78\",\"_rev\":\"830648995\",\"script\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"830648995\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.344Z", - "time": 120, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 120 - } - }, - { - "_id": "a24b4238dd03558821b97814ffd2d4fe", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/24ea2978-9aa2-4be2-ae68-69ba1c60bdbf" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"24ea2978-9aa2-4be2-ae68-69ba1c60bdbf\",\"_rev\":\"1833018919\",\"script\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1833018919\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.345Z", - "time": 122, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 122 - } - }, - { - "_id": "5b6cd44df59afde5573272805341d287", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2078, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/MessageNode/19eb6cc1-d604-4bc1-a368-9505776477ba" - }, - "response": { - "bodySize": 409, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 409, - "text": "{\"_id\":\"19eb6cc1-d604-4bc1-a368-9505776477ba\",\"_rev\":\"-1446348543\",\"messageYes\":{\"en\":\"Proceed to results\"},\"message\":{\"en\":\"Before viewing the selfie authentication results, make sure you stop sharing your screen with the interviewee.\"},\"messageNo\":{},\"_type\":{\"_id\":\"MessageNode\",\"name\":\"Message Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1446348543\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "409" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.346Z", - "time": 198, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 198 - } - }, - { - "_id": "9d786a033104c3058e2d8c3860192fd7", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2078, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/MessageNode/e6bf6cf7-62d2-4498-9db9-727762eb9e81" - }, - "response": { - "bodySize": 407, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 407, - "text": "{\"_id\":\"e6bf6cf7-62d2-4498-9db9-727762eb9e81\",\"_rev\":\"104729500\",\"messageYes\":{\"en\":\"Proceed to results\"},\"message\":{\"en\":\"Before viewing the selfie authentication results, make sure you stop sharing your screen with the interviewee.\"},\"messageNo\":{},\"_type\":{\"_id\":\"MessageNode\",\"name\":\"Message Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"104729500\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "407" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.347Z", - "time": 188, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 188 - } - }, - { - "_id": "2d733a340b05e55a2c5cdff96bc935bd", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/936c098d-bd54-4f05-827c-ed36559518ac" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"936c098d-bd54-4f05-827c-ed36559518ac\",\"_rev\":\"-1217331790\",\"script\":\"ca0c39c5-9c50-417f-a36e-815cfd1ecffe\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1217331790\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.348Z", - "time": 118, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 118 - } - }, - { - "_id": "cbcb17949308136fb25a13c0973ed563", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/eed23b6a-4f3f-46e1-99fe-9b62de1ac27d" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"eed23b6a-4f3f-46e1-99fe-9b62de1ac27d\",\"_rev\":\"-865724007\",\"script\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-865724007\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.348Z", - "time": 147, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 147 - } - }, - { - "_id": "24aed657055779c35c5dd5211c1a9e75", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2053, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/trees/IntervieweeRegistration" - }, - "response": { - "bodySize": 3139, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 3139, - "text": "{\"_id\":\"IntervieweeRegistration\",\"_rev\":\"-1875023946\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"P1 Verify\\\"]\"},\"entryNodeId\":\"1f503e47-5b59-4ff3-950b-d86f75daedd9\",\"innerTreeOnly\":false,\"nodes\":{\"029c508c-2c37-47b5-842d-6a914106995b\":{\"connections\":{\"false\":\"2295c6bc-6eb5-4822-978e-640312c34ea0\",\"true\":\"5a52a154-9bc9-461a-aee2-85e9cfb34fd9\"},\"displayName\":\"Already verified\",\"nodeType\":\"PageNode\",\"x\":853,\"y\":292.015625},\"139d3499-ebe9-48aa-8230-a7ee11165f60\":{\"connections\":{\"false\":\"ae3b66b6-f4b1-4b40-ad90-f478a9c766a2\",\"true\":\"af9a8a68-571a-4434-9b3d-bc84e4ec6fb6\"},\"displayName\":\"Lookup Interviewee\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":386,\"y\":232.015625},\"1e4264ea-7329-4ab6-b536-2990ba2ff6c0\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Error Creating Account\",\"nodeType\":\"PageNode\",\"x\":1552,\"y\":253.015625},\"1f503e47-5b59-4ff3-950b-d86f75daedd9\":{\"connections\":{\"outcome\":\"139d3499-ebe9-48aa-8230-a7ee11165f60\"},\"displayName\":\"Register Interviewee\",\"nodeType\":\"PageNode\",\"x\":164,\"y\":230.015625},\"2295c6bc-6eb5-4822-978e-640312c34ea0\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Selfie Authenticate\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":1550,\"y\":387.015625},\"5214b99f-fd80-4f25-8798-4530eea5e3cb\":{\"connections\":{\"CREATED\":\"b5ca1e74-ee28-45ef-95ee-bf53e1ead142\",\"FAILURE\":\"1e4264ea-7329-4ab6-b536-2990ba2ff6c0\"},\"displayName\":\"Create Account\",\"nodeType\":\"CreateObjectNode\",\"x\":1317,\"y\":179.015625},\"5a52a154-9bc9-461a-aee2-85e9cfb34fd9\":{\"connections\":{\"true\":\"d31ee3a0-9b8d-4f72-9037-deb2eb27268a\"},\"displayName\":\"Prepare Account\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":1098,\"y\":546.015625},\"ae3b66b6-f4b1-4b40-ad90-f478a9c766a2\":{\"connections\":{\"true\":\"5214b99f-fd80-4f25-8798-4530eea5e3cb\"},\"displayName\":\"Prepare Account\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":1094,\"y\":196.015625},\"af9a8a68-571a-4434-9b3d-bc84e4ec6fb6\":{\"connections\":{\"false\":\"5a52a154-9bc9-461a-aee2-85e9cfb34fd9\",\"true\":\"029c508c-2c37-47b5-842d-6a914106995b\"},\"displayName\":\"Already verified?\",\"nodeType\":\"AttributeValueDecisionNode\",\"x\":627.15625,\"y\":344.015625},\"b5ca1e74-ee28-45ef-95ee-bf53e1ead142\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Verify Applicant\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":1553,\"y\":125.015625},\"d31ee3a0-9b8d-4f72-9037-deb2eb27268a\":{\"connections\":{\"FAILURE\":\"ed269417-887d-4e6a-9569-ca3cae6f0424\",\"PATCHED\":\"b5ca1e74-ee28-45ef-95ee-bf53e1ead142\"},\"displayName\":\"Update Account\",\"nodeType\":\"PatchObjectNode\",\"x\":1321,\"y\":530.015625},\"ed269417-887d-4e6a-9569-ca3cae6f0424\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Error Updating Account\",\"nodeType\":\"PageNode\",\"x\":1551,\"y\":522.015625}},\"description\":\"Interviewee registration journey with full identity verification\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":54,\"y\":140},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1838,\"y\":351},\"startNode\":{\"x\":50,\"y\":250}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1875023946\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "3139" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 788, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.549Z", - "time": 62, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 62 - } - }, - { - "_id": "a61e2307616c61de57bdd0c319d5885c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/029c508c-2c37-47b5-842d-6a914106995b" - }, - "response": { - "bodySize": 511, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 511, - "text": "{\"_id\":\"029c508c-2c37-47b5-842d-6a914106995b\",\"_rev\":\"60444018\",\"nodes\":[{\"_id\":\"efa28d41-24b0-405d-8add-ae6baba145e4\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Results\"},{\"_id\":\"b3cb17c3-1066-4daa-87b8-e8902f84c650\",\"nodeType\":\"MessageNode\",\"displayName\":\"Verify or authenticate?\"}],\"pageDescription\":{},\"pageHeader\":{\"en\":\"Applicant Already Verified\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"60444018\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "511" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 784, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.627Z", - "time": 82, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 82 - } - }, - { - "_id": "fc24b8f8a06e7876de7ac3585ae6d6ae", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2091, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/IdentifyExistingUserNode/139d3499-ebe9-48aa-8230-a7ee11165f60" - }, - "response": { - "bodySize": 296, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 296, - "text": "{\"_id\":\"139d3499-ebe9-48aa-8230-a7ee11165f60\",\"_rev\":\"1606441275\",\"identityAttribute\":\"mail\",\"identifier\":\"userName\",\"_type\":{\"_id\":\"IdentifyExistingUserNode\",\"name\":\"Identify Existing User\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1606441275\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "296" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.629Z", - "time": 75, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 75 - } - }, - { - "_id": "40dda9b867e53a2244b7df5d2f50c5f2", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/1e4264ea-7329-4ab6-b536-2990ba2ff6c0" - }, - "response": { - "bodySize": 460, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 460, - "text": "{\"_id\":\"1e4264ea-7329-4ab6-b536-2990ba2ff6c0\",\"_rev\":\"-848074132\",\"nodes\":[{\"_id\":\"29f9b4a6-e9b1-4d82-a3de-1d5e06672ee1\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Remove Button\"}],\"pageDescription\":{\"en\":\"There was an error registering the applicant. Please contact your system administrator.\"},\"pageHeader\":{\"en\":\"Error Creating Account\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-848074132\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "460" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.630Z", - "time": 69, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 69 - } - }, - { - "_id": "6fdbda0deae1abc36c83c113cfae7725", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/1f503e47-5b59-4ff3-950b-d86f75daedd9" - }, - "response": { - "bodySize": 520, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 520, - "text": "{\"_id\":\"1f503e47-5b59-4ff3-950b-d86f75daedd9\",\"_rev\":\"-1823189144\",\"nodes\":[{\"_id\":\"d1513615-96e6-483a-b169-f465fbea4acc\",\"nodeType\":\"AttributeCollectorNode\",\"displayName\":\"Attributes\"}],\"pageDescription\":{\"en\":\"Please provide the applicant/interviewee's first name, last name, private email address, and mobile phone number to start the process\"},\"pageHeader\":{\"en\":\"Register Applicant/Interviewee\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1823189144\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "520" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.631Z", - "time": 97, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 97 - } - }, - { - "_id": "b0ba842eba710ddd2bcf5d4ef9bfee05", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/2295c6bc-6eb5-4822-978e-640312c34ea0" - }, - "response": { - "bodySize": 282, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 282, - "text": "{\"_id\":\"2295c6bc-6eb5-4822-978e-640312c34ea0\",\"_rev\":\"-790301059\",\"tree\":\"IntervieweeSelfieAuthentication\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-790301059\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "282" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.633Z", - "time": 92, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 92 - } - }, - { - "_id": "820ca9a559e0cfe12182c9f0d0177afd", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2083, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/CreateObjectNode/5214b99f-fd80-4f25-8798-4530eea5e3cb" - }, - "response": { - "bodySize": 278, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 278, - "text": "{\"_id\":\"5214b99f-fd80-4f25-8798-4530eea5e3cb\",\"_rev\":\"-1759589056\",\"identityResource\":\"managed/bravo_user\",\"_type\":{\"_id\":\"CreateObjectNode\",\"name\":\"Create Object\",\"collection\":true},\"_outcomes\":[{\"id\":\"CREATED\",\"displayName\":\"Created\"},{\"id\":\"FAILURE\",\"displayName\":\"Failed\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1759589056\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "278" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.634Z", - "time": 130, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 130 - } - }, - { - "_id": "fa3891af4f2044a3059587d13e23738c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/5a52a154-9bc9-461a-aee2-85e9cfb34fd9" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"5a52a154-9bc9-461a-aee2-85e9cfb34fd9\",\"_rev\":\"-1913029374\",\"script\":\"835c3d04-4883-4fb7-b957-bd6ff6ff9d50\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1913029374\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.635Z", - "time": 84, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 84 - } - }, - { - "_id": "8462abc694210a766675b0f1f75dff2d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/ae3b66b6-f4b1-4b40-ad90-f478a9c766a2" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"ae3b66b6-f4b1-4b40-ad90-f478a9c766a2\",\"_rev\":\"1000446242\",\"script\":\"835c3d04-4883-4fb7-b957-bd6ff6ff9d50\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1000446242\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.636Z", - "time": 91, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 91 - } - }, - { - "_id": "445ea99f0087e6abd29fc0e9aff7451b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2093, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/AttributeValueDecisionNode/af9a8a68-571a-4434-9b3d-bc84e4ec6fb6" - }, - "response": { - "bodySize": 398, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 398, - "text": "{\"_id\":\"af9a8a68-571a-4434-9b3d-bc84e4ec6fb6\",\"_rev\":\"-1500957064\",\"comparisonValue\":\"Successfully verified\",\"comparisonOperation\":\"EQUALS\",\"identityAttribute\":\"userName\",\"comparisonAttribute\":\"custom_verifyStatus\",\"_type\":{\"_id\":\"AttributeValueDecisionNode\",\"name\":\"Attribute Value Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1500957064\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "398" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.637Z", - "time": 121, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 121 - } - }, - { - "_id": "47fe2e23ae23d3687e19bf81912b0feb", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/b5ca1e74-ee28-45ef-95ee-bf53e1ead142" - }, - "response": { - "bodySize": 278, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 278, - "text": "{\"_id\":\"b5ca1e74-ee28-45ef-95ee-bf53e1ead142\",\"_rev\":\"1358720253\",\"tree\":\"IntervieweeFullVerification\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1358720253\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "278" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.638Z", - "time": 79, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 79 - } - }, - { - "_id": "62ec173b46a38c52cb164cc31936fb95", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2082, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PatchObjectNode/d31ee3a0-9b8d-4f72-9037-deb2eb27268a" - }, - "response": { - "bodySize": 346, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 346, - "text": "{\"_id\":\"d31ee3a0-9b8d-4f72-9037-deb2eb27268a\",\"_rev\":\"283483699\",\"identityResource\":\"managed/bravo_user\",\"patchAsObject\":false,\"ignoredFields\":[],\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"PatchObjectNode\",\"name\":\"Patch Object\",\"collection\":true},\"_outcomes\":[{\"id\":\"PATCHED\",\"displayName\":\"Patched\"},{\"id\":\"FAILURE\",\"displayName\":\"Failed\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"283483699\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "346" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.639Z", - "time": 110, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 110 - } - }, - { - "_id": "5019de2818fce4eb1d7b8bbc6ce8945b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/ed269417-887d-4e6a-9569-ca3cae6f0424" - }, - "response": { - "bodySize": 514, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 514, - "text": "{\"_id\":\"ed269417-887d-4e6a-9569-ca3cae6f0424\",\"_rev\":\"238119602\",\"nodes\":[{\"_id\":\"c8376489-5929-476e-bb5a-5b3b7a24084b\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Debug\"},{\"_id\":\"7a17bd74-d6b0-4f33-993d-1ec9e9700cc4\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Remove Button\"}],\"pageDescription\":{\"en\":\"An error occurred updating the account.\"},\"pageHeader\":{\"en\":\"Error Updating Account\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"238119602\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "514" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.641Z", - "time": 107, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 107 - } - }, - { - "_id": "b320645b4c71a98399c3743c2378c543", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/efa28d41-24b0-405d-8add-ae6baba145e4" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"efa28d41-24b0-405d-8add-ae6baba145e4\",\"_rev\":\"174471277\",\"script\":\"ca0c39c5-9c50-417f-a36e-815cfd1ecffe\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"174471277\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.772Z", - "time": 94, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 94 - } - }, - { - "_id": "1fe8c5761c96f0f326ef8421cd1686a8", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2078, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/MessageNode/b3cb17c3-1066-4daa-87b8-e8902f84c650" - }, - "response": { - "bodySize": 375, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 375, - "text": "{\"_id\":\"b3cb17c3-1066-4daa-87b8-e8902f84c650\",\"_rev\":\"1747003890\",\"messageYes\":{\"en\":\"Verify again\"},\"message\":{\"en\":\"This applicant has already been successfully verified.\"},\"messageNo\":{\"et\":\"Authenticate applicant\"},\"_type\":{\"_id\":\"MessageNode\",\"name\":\"Message Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1747003890\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "375" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.773Z", - "time": 101, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 101 - } - }, - { - "_id": "dd8cb009fbd2de97ed7ce427768b5971", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/29f9b4a6-e9b1-4d82-a3de-1d5e06672ee1" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"29f9b4a6-e9b1-4d82-a3de-1d5e06672ee1\",\"_rev\":\"-1174532609\",\"script\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1174532609\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.774Z", - "time": 73, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 73 - } - }, - { - "_id": "4e717d6d3d70d0d1271b99cc11fe6b9b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/AttributeCollectorNode/d1513615-96e6-483a-b169-f465fbea4acc" - }, - "response": { - "bodySize": 344, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 344, - "text": "{\"_id\":\"d1513615-96e6-483a-b169-f465fbea4acc\",\"_rev\":\"-646604869\",\"attributesToCollect\":[\"givenName\",\"sn\",\"mail\",\"telephoneNumber\"],\"identityAttribute\":\"userName\",\"validateInputs\":true,\"required\":true,\"_type\":{\"_id\":\"AttributeCollectorNode\",\"name\":\"Attribute Collector\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-646604869\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "344" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.775Z", - "time": 87, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 87 - } - }, - { - "_id": "9ec239bf40cb158509583d085b22d420", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/c8376489-5929-476e-bb5a-5b3b7a24084b" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"c8376489-5929-476e-bb5a-5b3b7a24084b\",\"_rev\":\"1155028337\",\"script\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1155028337\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.776Z", - "time": 79, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 79 - } - }, - { - "_id": "41e80b9a895d7049b48329a8cefbb5c9", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/7a17bd74-d6b0-4f33-993d-1ec9e9700cc4" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"7a17bd74-d6b0-4f33-993d-1ec9e9700cc4\",\"_rev\":\"-900243412\",\"script\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-900243412\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.777Z", - "time": 87, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 87 - } - }, - { - "_id": "90194af63c3172e4f7ee6fb75872810f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2061, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/trees/IntervieweeSelfieAuthentication" - }, - "response": { - "bodySize": 2985, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 2985, - "text": "{\"_id\":\"IntervieweeSelfieAuthentication\",\"_rev\":\"458768360\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"IDV\\\",\\\"P1 Verify\\\"]\"},\"entryNodeId\":\"a5ad6592-b37a-43fb-9202-117f6ef7b1c2\",\"innerTreeOnly\":false,\"nodes\":{\"290f65ae-de1a-40be-9c3c-c0174decb0a2\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"91afb28b-6cb6-4bc4-b781-5802f7570da0\"},\"displayName\":\"Find Interviewee\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":614,\"y\":189},\"67f33640-a333-4172-8339-2346d873627c\":{\"connections\":{\"FAILURE\":\"70f2653c-66e7-4787-96d1-6c56b0ffc9fd\",\"PATCHED\":\"98b783bd-e27d-4343-90bb-dc6cb6433347\"},\"displayName\":\"Update Account\",\"nodeType\":\"PatchObjectNode\",\"x\":1119,\"y\":151.015625},\"6b761fcb-3f19-489d-8273-0c2e6b49faca\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Cancel Dialog\",\"nodeType\":\"PageNode\",\"x\":1561,\"y\":292.015625},\"70f2653c-66e7-4787-96d1-6c56b0ffc9fd\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Error Dialog\",\"nodeType\":\"PageNode\",\"x\":1564,\"y\":653.015625},\"7f0f546b-4d92-4450-9e0d-fc07830ea3db\":{\"connections\":{\"true\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Success Dialog\",\"nodeType\":\"PageNode\",\"x\":1562,\"y\":84.015625},\"91afb28b-6cb6-4bc4-b781-5802f7570da0\":{\"connections\":{\"CANCEL\":\"6b761fcb-3f19-489d-8273-0c2e6b49faca\",\"ERROR\":\"70f2653c-66e7-4787-96d1-6c56b0ffc9fd\",\"FAIL\":\"96e7155e-be3d-4f15-8c50-8a299e0d68ce\",\"FAILPATCH\":\"96e7155e-be3d-4f15-8c50-8a299e0d68ce\",\"SUCCESPATCH\":\"67f33640-a333-4172-8339-2346d873627c\",\"SUCCESS\":\"67f33640-a333-4172-8339-2346d873627c\"},\"displayName\":\"AuthN Interviewee\",\"nodeType\":\"PageNode\",\"x\":842,\"y\":117.015625},\"96e7155e-be3d-4f15-8c50-8a299e0d68ce\":{\"connections\":{\"false\":\"d801bc95-03d6-4733-ae64-6270d56cd1ff\",\"true\":\"d801bc95-03d6-4733-ae64-6270d56cd1ff\"},\"displayName\":\"Stop Screen Share\",\"nodeType\":\"PageNode\",\"x\":1344,\"y\":448.015625},\"98b783bd-e27d-4343-90bb-dc6cb6433347\":{\"connections\":{\"false\":\"7f0f546b-4d92-4450-9e0d-fc07830ea3db\",\"true\":\"7f0f546b-4d92-4450-9e0d-fc07830ea3db\"},\"displayName\":\"Stop Screen Share\",\"nodeType\":\"PageNode\",\"x\":1336,\"y\":86.015625},\"a5ad6592-b37a-43fb-9202-117f6ef7b1c2\":{\"connections\":{\"known\":\"290f65ae-de1a-40be-9c3c-c0174decb0a2\",\"unknown\":\"bb782509-821a-4dfb-ae28-52c3cf0ba52e\"},\"displayName\":\"Check username\",\"nodeType\":\"ScriptedDecisionNode\",\"x\":183,\"y\":184.015625},\"bb782509-821a-4dfb-ae28-52c3cf0ba52e\":{\"connections\":{\"outcome\":\"290f65ae-de1a-40be-9c3c-c0174decb0a2\"},\"displayName\":\"Select Interviewee\",\"nodeType\":\"PageNode\",\"x\":383,\"y\":295.015625},\"d801bc95-03d6-4733-ae64-6270d56cd1ff\":{\"connections\":{\"true\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Failed Dialog\",\"nodeType\":\"PageNode\",\"x\":1563,\"y\":447.015625}},\"description\":\"Interviewee selfie authentication\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1827,\"y\":47},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1830,\"y\":635},\"startNode\":{\"x\":60,\"y\":202}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"458768360\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "2985" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:12 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.879Z", - "time": 63, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 63 - } - }, - { - "_id": "d98a177d842a035d3ba7ac1b218ff46f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2091, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/IdentifyExistingUserNode/290f65ae-de1a-40be-9c3c-c0174decb0a2" - }, - "response": { - "bodySize": 296, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 296, - "text": "{\"_id\":\"290f65ae-de1a-40be-9c3c-c0174decb0a2\",\"_rev\":\"1417349727\",\"identityAttribute\":\"mail\",\"identifier\":\"userName\",\"_type\":{\"_id\":\"IdentifyExistingUserNode\",\"name\":\"Identify Existing User\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1417349727\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "296" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.953Z", - "time": 125, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 125 - } - }, - { - "_id": "9f7294a7b8c274d600ca36ac01746dba", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2082, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PatchObjectNode/67f33640-a333-4172-8339-2346d873627c" - }, - "response": { - "bodySize": 385, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 385, - "text": "{\"_id\":\"67f33640-a333-4172-8339-2346d873627c\",\"_rev\":\"1200634581\",\"identityResource\":\"managed/bravo_user\",\"patchAsObject\":false,\"ignoredFields\":[\"mail\",\"fr-attr-istr1\",\"fr-attr-istr2\"],\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"PatchObjectNode\",\"name\":\"Patch Object\",\"collection\":true},\"_outcomes\":[{\"id\":\"PATCHED\",\"displayName\":\"Patched\"},{\"id\":\"FAILURE\",\"displayName\":\"Failed\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1200634581\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "385" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.955Z", - "time": 129, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 129 - } - }, - { - "_id": "e183ce0d952ba83d51a41c5f3fe2c528", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/6b761fcb-3f19-489d-8273-0c2e6b49faca" - }, - "response": { - "bodySize": 373, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 373, - "text": "{\"_id\":\"6b761fcb-3f19-489d-8273-0c2e6b49faca\",\"_rev\":\"-1599400493\",\"nodes\":[{\"_id\":\"1ecaf904-20be-401a-90bc-84b84fa3dfbf\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Remove Button\"}],\"pageDescription\":{},\"pageHeader\":{\"en\":\"Selfie Verification Canceled\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1599400493\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "373" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.956Z", - "time": 114, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 114 - } - }, - { - "_id": "59590ad9a65d1766d5e8372826974a6f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/70f2653c-66e7-4787-96d1-6c56b0ffc9fd" - }, - "response": { - "bodySize": 472, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 472, - "text": "{\"_id\":\"70f2653c-66e7-4787-96d1-6c56b0ffc9fd\",\"_rev\":\"-230051618\",\"nodes\":[{\"_id\":\"cbfe448f-b242-4c96-9191-9140d8d13f14\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Debug\"},{\"_id\":\"81523af4-3a82-4df7-9d9c-e45fc1e3d5f3\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Remove Button\"}],\"pageDescription\":{},\"pageHeader\":{\"en\":\"Selfie Verification Error\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-230051618\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "472" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.957Z", - "time": 110, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 110 - } - }, - { - "_id": "096ef41b8e1d8efda3c073e9b744d16f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/7f0f546b-4d92-4450-9e0d-fc07830ea3db" - }, - "response": { - "bodySize": 478, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 478, - "text": "{\"_id\":\"7f0f546b-4d92-4450-9e0d-fc07830ea3db\",\"_rev\":\"1947303660\",\"nodes\":[{\"_id\":\"178ad9e5-7825-40bb-a426-ae991d0ffcea\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Results\"},{\"_id\":\"03eae59a-d184-482e-82a7-ad0a99d5ee6e\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Remove Button\"}],\"pageDescription\":{},\"pageHeader\":{\"en\":\"Selfie Authentication Success\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1947303660\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "478" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.959Z", - "time": 131, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 131 - } - }, - { - "_id": "24aded681670e51e91a18d6d8406153f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/91afb28b-6cb6-4bc4-b781-5802f7570da0" - }, - "response": { - "bodySize": 783, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 783, - "text": "{\"_id\":\"91afb28b-6cb6-4bc4-b781-5802f7570da0\",\"_rev\":\"1928103398\",\"nodes\":[{\"_id\":\"e08c5232-2b8c-4d40-958b-2cb5a261d5e6\",\"nodeType\":\"PingOneVerifyAuthentication\",\"displayName\":\"Selfie AuthN\"}],\"pageDescription\":{\"en\":\"Please choose how to delegate the selfie authentication step to the interviewee. If you choose QR, share your screen via zoom and have the interviewee scan it, then stop sharing.\"},\"pageHeader\":{\"en\":\"Authenticate Interviewee\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"SUCCESS\",\"displayName\":\"Success\"},{\"id\":\"SUCCESPATCH\",\"displayName\":\"Success (Patch ID)\"},{\"id\":\"FAIL\",\"displayName\":\"Fail\"},{\"id\":\"FAILPATCH\",\"displayName\":\"Fail (Patch ID)\"},{\"id\":\"CANCEL\",\"displayName\":\"Cancel\"},{\"id\":\"ERROR\",\"displayName\":\"Error\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1928103398\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "783" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.960Z", - "time": 117, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 117 - } - }, - { - "_id": "e794db9657ee385624ad253ebb493b5d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/96e7155e-be3d-4f15-8c50-8a299e0d68ce" - }, - "response": { - "bodySize": 506, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 506, - "text": "{\"_id\":\"96e7155e-be3d-4f15-8c50-8a299e0d68ce\",\"_rev\":\"290584646\",\"nodes\":[{\"_id\":\"7d73a04b-47bc-4466-9ad4-950a78b63fd6\",\"nodeType\":\"MessageNode\",\"displayName\":\"Proceed?\"}],\"pageDescription\":{},\"stage\":\"{\\\"ConfirmationCallback\\\":[{\\\"id\\\":\\\"7d73a04b-47bc-4466-9ad4-950a78b63fd6\\\",\\\"showOnlyPositiveAnswer\\\":true}]}\",\"pageHeader\":{\"en\":\"Stop Screen Sharing\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"290584646\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "506" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.962Z", - "time": 87, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 87 - } - }, - { - "_id": "de51e212e13923131ea054e479f8b959", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/98b783bd-e27d-4343-90bb-dc6cb6433347" - }, - "response": { - "bodySize": 507, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 507, - "text": "{\"_id\":\"98b783bd-e27d-4343-90bb-dc6cb6433347\",\"_rev\":\"-107768725\",\"nodes\":[{\"_id\":\"574800d6-a41f-42a3-b8d6-2d47eb57af90\",\"nodeType\":\"MessageNode\",\"displayName\":\"Proceed?\"}],\"pageDescription\":{},\"stage\":\"{\\\"ConfirmationCallback\\\":[{\\\"id\\\":\\\"574800d6-a41f-42a3-b8d6-2d47eb57af90\\\",\\\"showOnlyPositiveAnswer\\\":true}]}\",\"pageHeader\":{\"en\":\"Stop Screen Sharing\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-107768725\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "507" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.963Z", - "time": 135, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 135 - } - }, - { - "_id": "32aa3ffc8baa17d910b5e39c94f5d2a7", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/a5ad6592-b37a-43fb-9202-117f6ef7b1c2" - }, - "response": { - "bodySize": 351, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 351, - "text": "{\"_id\":\"a5ad6592-b37a-43fb-9202-117f6ef7b1c2\",\"_rev\":\"696883284\",\"script\":\"739bdc48-fd24-4c52-b353-88706d75558a\",\"outcomes\":[\"known\",\"unknown\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"known\",\"displayName\":\"known\"},{\"id\":\"unknown\",\"displayName\":\"unknown\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"696883284\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "351" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.965Z", - "time": 119, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 119 - } - }, - { - "_id": "94d6461cc72201875199e677b3f955ff", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/bb782509-821a-4dfb-ae28-52c3cf0ba52e" - }, - "response": { - "bodySize": 337, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 337, - "text": "{\"_id\":\"bb782509-821a-4dfb-ae28-52c3cf0ba52e\",\"_rev\":\"1266401107\",\"nodes\":[{\"_id\":\"d45a23ef-ac2f-49dc-a071-24ea69342c58\",\"nodeType\":\"AttributeCollectorNode\",\"displayName\":\"Email\"}],\"pageDescription\":{},\"pageHeader\":{},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1266401107\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "337" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.966Z", - "time": 114, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 114 - } - }, - { - "_id": "1772f5428e90be862d8bf7c798ab327a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/d801bc95-03d6-4733-ae64-6270d56cd1ff" - }, - "response": { - "bodySize": 476, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 476, - "text": "{\"_id\":\"d801bc95-03d6-4733-ae64-6270d56cd1ff\",\"_rev\":\"-1567547517\",\"nodes\":[{\"_id\":\"2bb843f4-e864-49c4-a432-a6bfc020bf54\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Results\"},{\"_id\":\"19562a6f-aae4-4925-a5db-7785862d504b\",\"nodeType\":\"ScriptedDecisionNode\",\"displayName\":\"Remove Button\"}],\"pageDescription\":{},\"pageHeader\":{\"en\":\"Selfie Verification Failed\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1567547517\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "476" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:12.970Z", - "time": 131, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 131 - } - }, - { - "_id": "f69b9cf5855e25df345c69b0ee0df625", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/1ecaf904-20be-401a-90bc-84b84fa3dfbf" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"1ecaf904-20be-401a-90bc-84b84fa3dfbf\",\"_rev\":\"-698499331\",\"script\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-698499331\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.112Z", - "time": 91, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 91 - } - }, - { - "_id": "667451bd27864530610ebb466a1d3c82", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/cbfe448f-b242-4c96-9191-9140d8d13f14" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"cbfe448f-b242-4c96-9191-9140d8d13f14\",\"_rev\":\"490200773\",\"script\":\"3cb43516-ae69-433a-8787-501d45db14e9\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"490200773\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.113Z", - "time": 84, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 84 - } - }, - { - "_id": "e9d51a68613354f8d6848a9e103be622", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/81523af4-3a82-4df7-9d9c-e45fc1e3d5f3" - }, - "response": { - "bodySize": 298, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 298, - "text": "{\"_id\":\"81523af4-3a82-4df7-9d9c-e45fc1e3d5f3\",\"_rev\":\"1725318053\",\"script\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1725318053\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "298" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.114Z", - "time": 81, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 81 - } - }, - { - "_id": "d315815e1a23eecbe6e3e411e6d98a68", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/03eae59a-d184-482e-82a7-ad0a99d5ee6e" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"03eae59a-d184-482e-82a7-ad0a99d5ee6e\",\"_rev\":\"863390414\",\"script\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"863390414\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.115Z", - "time": 95, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 95 - } - }, - { - "_id": "56477b4b9dd093784c0f1a58c4b456fb", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/178ad9e5-7825-40bb-a426-ae991d0ffcea" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"178ad9e5-7825-40bb-a426-ae991d0ffcea\",\"_rev\":\"962194756\",\"script\":\"eaab5b6d-fc11-4365-93da-00eb9121adb9\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"962194756\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.115Z", - "time": 109, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 109 - } - }, - { - "_id": "38c1cb25151eaacaee0aac737f0ebc9c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2094, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PingOneVerifyAuthentication/e08c5232-2b8c-4d40-958b-2cb5a261d5e6" - }, - "response": { - "bodySize": 948, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 948, - "text": "{\"_id\":\"e08c5232-2b8c-4d40-958b-2cb5a261d5e6\",\"_rev\":\"859385059\",\"saveMetadata\":false,\"tsTransactionId\":false,\"userNotification\":\"QR\",\"pictureAttribute\":\"fr-attr-str1\",\"tsAccessToken\":false,\"userNotificationChoiceMessage\":\"Invite interviewee via (must complete within 15mins):\",\"demoMode\":false,\"verifyPolicyId\":\"b10955bd-bf7d-46ba-89ce-f2be16dd1533\",\"userIdAttribute\":\"fr-attr-istr1\",\"pollWaitMessage\":\"Waiting for completion. Here is the code you will see on your device: %s\",\"userNotificationChoice\":true,\"timeOut\":270,\"tntpPingOneConfigName\":\"p1-volker-dev [/bravo]\",\"_type\":{\"_id\":\"PingOneVerifyAuthentication\",\"name\":\"PingOne Verify Authentication\",\"collection\":true},\"_outcomes\":[{\"id\":\"SUCCESS\",\"displayName\":\"Success\"},{\"id\":\"SUCCESPATCH\",\"displayName\":\"Success (Patch ID)\"},{\"id\":\"FAIL\",\"displayName\":\"Fail\"},{\"id\":\"FAILPATCH\",\"displayName\":\"Fail (Patch ID)\"},{\"id\":\"CANCEL\",\"displayName\":\"Cancel\"},{\"id\":\"ERROR\",\"displayName\":\"Error\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"859385059\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "948" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.116Z", - "time": 116, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 116 - } - }, - { - "_id": "130497b4aa9899ac0eb1777989a012aa", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2078, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/MessageNode/7d73a04b-47bc-4466-9ad4-950a78b63fd6" - }, - "response": { - "bodySize": 407, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 407, - "text": "{\"_id\":\"7d73a04b-47bc-4466-9ad4-950a78b63fd6\",\"_rev\":\"-84977214\",\"messageYes\":{\"en\":\"Proceed to results\"},\"message\":{\"en\":\"Before viewing the selfie authentication results, make sure you stop sharing your screen with the interviewee.\"},\"messageNo\":{},\"_type\":{\"_id\":\"MessageNode\",\"name\":\"Message Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-84977214\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "407" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.117Z", - "time": 76, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 76 - } - }, - { - "_id": "4710099374840f06133d13540f0d09f0", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2078, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/MessageNode/574800d6-a41f-42a3-b8d6-2d47eb57af90" - }, - "response": { - "bodySize": 406, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 406, - "text": "{\"_id\":\"574800d6-a41f-42a3-b8d6-2d47eb57af90\",\"_rev\":\"71466281\",\"messageYes\":{\"en\":\"Proceed to results\"},\"message\":{\"en\":\"Before viewing the selfie authentication results, make sure you stop sharing your screen with the interviewee.\"},\"messageNo\":{},\"_type\":{\"_id\":\"MessageNode\",\"name\":\"Message Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"71466281\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "406" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 784, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.119Z", - "time": 98, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 98 - } - }, - { - "_id": "a25ca5e26863335ea18cc42ab6a8c51e", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/AttributeCollectorNode/d45a23ef-ac2f-49dc-a071-24ea69342c58" - }, - "response": { - "bodySize": 309, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 309, - "text": "{\"_id\":\"d45a23ef-ac2f-49dc-a071-24ea69342c58\",\"_rev\":\"-914547284\",\"attributesToCollect\":[\"mail\"],\"identityAttribute\":\"userName\",\"validateInputs\":true,\"required\":true,\"_type\":{\"_id\":\"AttributeCollectorNode\",\"name\":\"Attribute Collector\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-914547284\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "309" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.120Z", - "time": 101, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 101 - } - }, - { - "_id": "6e9d4474b3ed41739b8ff24e8b891465", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/2bb843f4-e864-49c4-a432-a6bfc020bf54" - }, - "response": { - "bodySize": 299, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 299, - "text": "{\"_id\":\"2bb843f4-e864-49c4-a432-a6bfc020bf54\",\"_rev\":\"-1575742054\",\"script\":\"eaab5b6d-fc11-4365-93da-00eb9121adb9\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1575742054\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "299" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.121Z", - "time": 88, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 88 - } - }, - { - "_id": "e16cb404c983bdc19bbae00e34e6759d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2087, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ScriptedDecisionNode/19562a6f-aae4-4925-a5db-7785862d504b" - }, - "response": { - "bodySize": 297, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 297, - "text": "{\"_id\":\"19562a6f-aae4-4925-a5db-7785862d504b\",\"_rev\":\"201363834\",\"script\":\"9535446c-0ff6-4a76-8576-616599119d64\",\"outcomes\":[\"true\"],\"outputs\":[\"*\"],\"inputs\":[\"*\"],\"_type\":{\"_id\":\"ScriptedDecisionNode\",\"name\":\"Scripted Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"true\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"201363834\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "297" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.122Z", - "time": 109, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 109 - } - }, - { - "_id": "1d99d5edf1428b92de5a1b5b156c17fc", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2035, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/trees/Login" - }, - "response": { - "bodySize": 1882, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1882, - "text": "{\"_id\":\"Login\",\"_rev\":\"-550824128\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"Authentication\\\"]\"},\"entryNodeId\":\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\",\"innerTreeOnly\":false,\"nodes\":{\"33b24514-3e50-4180-8f08-ab6f4e51b07e\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Inner Tree Evaluator\",\"nodeType\":\"InnerTreeEvaluatorNode\",\"x\":987,\"y\":117},\"76b5e15c-493c-47dc-b813-01cbc74c5a85\":{\"connections\":{\"outcome\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Account Lockout\",\"nodeType\":\"AccountLockoutNode\",\"x\":1035,\"y\":278.015625},\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\":{\"connections\":{\"outcome\":\"a30b1258-4c35-4ebe-90f3-c11fced9b1e4\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":136,\"y\":59},\"a30b1258-4c35-4ebe-90f3-c11fced9b1e4\":{\"connections\":{\"CANCELLED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"EXPIRED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"FALSE\":\"feecdfb1-386c-423f-b4a0-05cf6b05f783\",\"LOCKED\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"TRUE\":\"bba3e0d8-8525-4e82-bf48-ac17f7988917\"},\"displayName\":\"Identity Store Decision\",\"nodeType\":\"IdentityStoreDecisionNode\",\"x\":409,\"y\":120.015625},\"bba3e0d8-8525-4e82-bf48-ac17f7988917\":{\"connections\":{\"outcome\":\"33b24514-3e50-4180-8f08-ab6f4e51b07e\"},\"displayName\":\"Increment Login Count\",\"nodeType\":\"IncrementLoginCountNode\",\"x\":690,\"y\":99},\"feecdfb1-386c-423f-b4a0-05cf6b05f783\":{\"connections\":{\"Reject\":\"76b5e15c-493c-47dc-b813-01cbc74c5a85\",\"Retry\":\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\"},\"displayName\":\"Retry Limit Decision\",\"nodeType\":\"RetryLimitDecisionNode\",\"x\":739,\"y\":219.015625}},\"description\":\"Platform Login Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1239,\"y\":178},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":1198,\"y\":351},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-550824128\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1882" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.238Z", - "time": 59, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 59 - } - }, - { - "_id": "7ddc267b0a5637fbffb104b2345432dc", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/InnerTreeEvaluatorNode/33b24514-3e50-4180-8f08-ab6f4e51b07e" - }, - "response": { - "bodySize": 270, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 270, - "text": "{\"_id\":\"33b24514-3e50-4180-8f08-ab6f4e51b07e\",\"_rev\":\"-1405518667\",\"tree\":\"ProgressiveProfile\",\"_type\":{\"_id\":\"InnerTreeEvaluatorNode\",\"name\":\"Inner Tree Evaluator\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1405518667\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "270" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.304Z", - "time": 76, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 76 - } - }, - { - "_id": "dbdd8637449486623a4c3fd395ac17cd", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2085, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/AccountLockoutNode/76b5e15c-493c-47dc-b813-01cbc74c5a85" - }, - "response": { - "bodySize": 221, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 221, - "text": "{\"_id\":\"76b5e15c-493c-47dc-b813-01cbc74c5a85\",\"_rev\":\"1359876658\",\"lockAction\":\"LOCK\",\"_type\":{\"_id\":\"AccountLockoutNode\",\"name\":\"Account Lockout\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1359876658\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "221" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.305Z", - "time": 107, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 107 - } - }, - { - "_id": "8799a9e976c6b5057e638d869aa3f3b5", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/a12bc72f-ad97-4f1e-a789-a1fa3dd566c8" - }, - "response": { - "bodySize": 670, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 670, - "text": "{\"_id\":\"a12bc72f-ad97-4f1e-a789-a1fa3dd566c8\",\"_rev\":\"-1594114\",\"nodes\":[{\"_id\":\"7354982f-57b6-4b04-9ddc-f1dd1e1e07d0\",\"nodeType\":\"ValidatedUsernameNode\",\"displayName\":\"Platform Username\"},{\"_id\":\"0c80c39b-4813-4e67-b4fb-5a0bba85f994\",\"nodeType\":\"ValidatedPasswordNode\",\"displayName\":\"Platform Password\"}],\"pageDescription\":{\"en\":\"New here? Create an account
Forgot username? Forgot password?\"},\"pageHeader\":{\"en\":\"Sign In\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1594114\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "670" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 784, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.306Z", - "time": 68, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 68 - } - }, - { - "_id": "17ce9fd825209c87dbcee99ef9dbaa26", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2092, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/IdentityStoreDecisionNode/a30b1258-4c35-4ebe-90f3-c11fced9b1e4" - }, - "response": { - "bodySize": 476, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 476, - "text": "{\"_id\":\"a30b1258-4c35-4ebe-90f3-c11fced9b1e4\",\"_rev\":\"-1414527552\",\"useUniversalIdForUsername\":false,\"minimumPasswordLength\":8,\"mixedCaseForPasswordChangeMessages\":false,\"_type\":{\"_id\":\"IdentityStoreDecisionNode\",\"name\":\"Identity Store Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"TRUE\",\"displayName\":\"True\"},{\"id\":\"FALSE\",\"displayName\":\"False\"},{\"id\":\"LOCKED\",\"displayName\":\"Locked\"},{\"id\":\"CANCELLED\",\"displayName\":\"Cancelled\"},{\"id\":\"EXPIRED\",\"displayName\":\"Expired\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1414527552\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "476" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.307Z", - "time": 106, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 106 - } - }, - { - "_id": "1dea67407b2af1b5eb08ad2602e852c1", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2090, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/IncrementLoginCountNode/bba3e0d8-8525-4e82-bf48-ac17f7988917" - }, - "response": { - "bodySize": 243, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 243, - "text": "{\"_id\":\"bba3e0d8-8525-4e82-bf48-ac17f7988917\",\"_rev\":\"2098371942\",\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"IncrementLoginCountNode\",\"name\":\"Increment Login Count\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"2098371942\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "243" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.307Z", - "time": 120, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 120 - } - }, - { - "_id": "02585b5927b9973296d10743c147b0e7", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/RetryLimitDecisionNode/feecdfb1-386c-423f-b4a0-05cf6b05f783" - }, - "response": { - "bodySize": 300, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 300, - "text": "{\"_id\":\"feecdfb1-386c-423f-b4a0-05cf6b05f783\",\"_rev\":\"-1192960910\",\"incrementUserAttributeOnFailure\":true,\"retryLimit\":5,\"_type\":{\"_id\":\"RetryLimitDecisionNode\",\"name\":\"Retry Limit Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"Retry\",\"displayName\":\"Retry\"},{\"id\":\"Reject\",\"displayName\":\"Reject\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1192960910\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "300" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.308Z", - "time": 97, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 97 - } - }, - { - "_id": "3ad482c7d920051bd0b33ffc4ecc55ee", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ValidatedUsernameNode/7354982f-57b6-4b04-9ddc-f1dd1e1e07d0" - }, - "response": { - "bodySize": 260, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 260, - "text": "{\"_id\":\"7354982f-57b6-4b04-9ddc-f1dd1e1e07d0\",\"_rev\":\"-2064640544\",\"usernameAttribute\":\"userName\",\"validateInput\":false,\"_type\":{\"_id\":\"ValidatedUsernameNode\",\"name\":\"Platform Username\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-2064640544\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "260" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.435Z", - "time": 85, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 85 - } - }, - { - "_id": "04412e5be75aaef6de4a5fd55f66644f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ValidatedPasswordNode/0c80c39b-4813-4e67-b4fb-5a0bba85f994" - }, - "response": { - "bodySize": 260, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 260, - "text": "{\"_id\":\"0c80c39b-4813-4e67-b4fb-5a0bba85f994\",\"_rev\":\"-1763423776\",\"passwordAttribute\":\"password\",\"validateInput\":false,\"_type\":{\"_id\":\"ValidatedPasswordNode\",\"name\":\"Platform Password\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1763423776\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "260" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.437Z", - "time": 110, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 110 - } - }, - { - "_id": "02536accd38d4aa672b4f717c4a0adef", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2048, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/trees/ProgressiveProfile" - }, - "response": { - "bodySize": 1354, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1354, - "text": "{\"_id\":\"ProgressiveProfile\",\"_rev\":\"-1028934999\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"Progressive Profile\\\"]\"},\"entryNodeId\":\"8afdaec3-275e-4301-bb53-34f03e6a4b29\",\"innerTreeOnly\":false,\"nodes\":{\"423a959a-a1b9-498a-b0f7-596b6b6e775a\":{\"connections\":{\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"PATCHED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Patch Object\",\"nodeType\":\"PatchObjectNode\",\"x\":766,\"y\":36},\"8afdaec3-275e-4301-bb53-34f03e6a4b29\":{\"connections\":{\"false\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"true\":\"a1f45b44-5bf7-4c57-aa3f-75c619c7db8e\"},\"displayName\":\"Login Count Decision\",\"nodeType\":\"LoginCountDecisionNode\",\"x\":152,\"y\":36},\"a1f45b44-5bf7-4c57-aa3f-75c619c7db8e\":{\"connections\":{\"false\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\",\"true\":\"a5aecad8-854a-4ed5-b719-ff6c90e858c0\"},\"displayName\":\"Query Filter Decision\",\"nodeType\":\"QueryFilterDecisionNode\",\"x\":357,\"y\":36},\"a5aecad8-854a-4ed5-b719-ff6c90e858c0\":{\"connections\":{\"outcome\":\"423a959a-a1b9-498a-b0f7-596b6b6e775a\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":555,\"y\":20}},\"description\":\"Prompt for missing preferences on 3rd login\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":802,\"y\":312},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":919,\"y\":171},\"startNode\":{\"x\":50,\"y\":58.5}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1028934999\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1354" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 788, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.554Z", - "time": 60, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 60 - } - }, - { - "_id": "d315b7cd5e30c55251af2e681538d990", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2082, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PatchObjectNode/423a959a-a1b9-498a-b0f7-596b6b6e775a" - }, - "response": { - "bodySize": 347, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 347, - "text": "{\"_id\":\"423a959a-a1b9-498a-b0f7-596b6b6e775a\",\"_rev\":\"-253417055\",\"identityResource\":\"managed/bravo_user\",\"patchAsObject\":false,\"ignoredFields\":[],\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"PatchObjectNode\",\"name\":\"Patch Object\",\"collection\":true},\"_outcomes\":[{\"id\":\"PATCHED\",\"displayName\":\"Patched\"},{\"id\":\"FAILURE\",\"displayName\":\"Failed\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-253417055\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "347" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.619Z", - "time": 96, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 96 - } - }, - { - "_id": "adc6b3c5a791514a7353dac65f6901e8", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/LoginCountDecisionNode/8afdaec3-275e-4301-bb53-34f03e6a4b29" - }, - "response": { - "bodySize": 300, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 300, - "text": "{\"_id\":\"8afdaec3-275e-4301-bb53-34f03e6a4b29\",\"_rev\":\"-1679047423\",\"interval\":\"AT\",\"identityAttribute\":\"userName\",\"amount\":3,\"_type\":{\"_id\":\"LoginCountDecisionNode\",\"name\":\"Login Count Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1679047423\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "300" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.620Z", - "time": 131, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 131 - } - }, - { - "_id": "a2828bb73ad46ace81aeb03fbbd8079a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2090, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/QueryFilterDecisionNode/a1f45b44-5bf7-4c57-aa3f-75c619c7db8e" - }, - "response": { - "bodySize": 378, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 378, - "text": "{\"_id\":\"a1f45b44-5bf7-4c57-aa3f-75c619c7db8e\",\"_rev\":\"-1852493841\",\"identityAttribute\":\"userName\",\"queryFilter\":\"!(/preferences pr) or /preferences/marketing eq false or /preferences/updates eq false\",\"_type\":{\"_id\":\"QueryFilterDecisionNode\",\"name\":\"Query Filter Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1852493841\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "378" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.622Z", - "time": 120, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 120 - } - }, - { - "_id": "d7bd3bd852d372ad1b3cd44a9592ae1b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/a5aecad8-854a-4ed5-b719-ff6c90e858c0" - }, - "response": { - "bodySize": 387, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 387, - "text": "{\"_id\":\"a5aecad8-854a-4ed5-b719-ff6c90e858c0\",\"_rev\":\"380010937\",\"nodes\":[{\"_id\":\"0a042e10-b22e-4e02-86c4-65e26e775f7a\",\"nodeType\":\"AttributeCollectorNode\",\"displayName\":\"Attribute Collector\"}],\"pageDescription\":{},\"pageHeader\":{\"en\":\"Please select your preferences\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"380010937\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "387" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.623Z", - "time": 98, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 98 - } - }, - { - "_id": "55582f11c03f3f5731d6f9f5d61e3321", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/AttributeCollectorNode/0a042e10-b22e-4e02-86c4-65e26e775f7a" - }, - "response": { - "bodySize": 351, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 351, - "text": "{\"_id\":\"0a042e10-b22e-4e02-86c4-65e26e775f7a\",\"_rev\":\"-1210529544\",\"attributesToCollect\":[\"preferences/updates\",\"preferences/marketing\"],\"identityAttribute\":\"userName\",\"validateInputs\":false,\"required\":false,\"_type\":{\"_id\":\"AttributeCollectorNode\",\"name\":\"Attribute Collector\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1210529544\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "351" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.757Z", - "time": 74, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 74 - } - }, - { - "_id": "559f4e991252ed3421ef115af94cde68", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2042, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/trees/Registration" - }, - "response": { - "bodySize": 1239, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1239, - "text": "{\"_id\":\"Registration\",\"_rev\":\"1002362847\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"Registration\\\"]\"},\"entryNodeId\":\"0c091c49-f3af-48fb-ac6f-07fba0499dd6\",\"innerTreeOnly\":false,\"nodes\":{\"0c091c49-f3af-48fb-ac6f-07fba0499dd6\":{\"connections\":{\"outcome\":\"6b70de2f-a625-4957-93d9-37005e33e6e1\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":261,\"y\":168},\"6b70de2f-a625-4957-93d9-37005e33e6e1\":{\"connections\":{\"outcome\":\"ad5dcbb3-7335-49b7-b3e7-7d850bb88237\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":509,\"y\":305.015625},\"97a15eb2-a015-4b6d-81a0-be78c3aa1a3b\":{\"connections\":{\"outcome\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Increment Login Count\",\"nodeType\":\"IncrementLoginCountNode\",\"x\":895,\"y\":220},\"ad5dcbb3-7335-49b7-b3e7-7d850bb88237\":{\"connections\":{\"CREATED\":\"97a15eb2-a015-4b6d-81a0-be78c3aa1a3b\",\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\"},\"displayName\":\"Create Object\",\"nodeType\":\"CreateObjectNode\",\"x\":751,\"y\":282}},\"description\":\"Platform Registration Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1119,\"y\":247},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":955,\"y\":369},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1002362847\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1239" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.834Z", - "time": 58, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 58 - } - }, - { - "_id": "a70bbe5b66a3c27ec14428632ef7b8c7", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/0c091c49-f3af-48fb-ac6f-07fba0499dd6" - }, - "response": { - "bodySize": 935, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 935, - "text": "{\"_id\":\"0c091c49-f3af-48fb-ac6f-07fba0499dd6\",\"_rev\":\"762531723\",\"nodes\":[{\"_id\":\"7fcaf48e-a754-4959-858b-05b2933b825f\",\"nodeType\":\"ValidatedUsernameNode\",\"displayName\":\"Platform Username\"},{\"_id\":\"d3ce2036-1523-4ce8-b1a2-895a2a036667\",\"nodeType\":\"AttributeCollectorNode\",\"displayName\":\"Attribute Collector\"},{\"_id\":\"3d8709a1-f09f-4d1f-8094-2850e472c1db\",\"nodeType\":\"ValidatedPasswordNode\",\"displayName\":\"Platform Password\"},{\"_id\":\"120c69d3-90b4-4ad4-b7af-380e8b119340\",\"nodeType\":\"KbaCreateNode\",\"displayName\":\"KBA Definition\"},{\"_id\":\"b4a0e915-c15d-4b83-9c9d-18347d645976\",\"nodeType\":\"AcceptTermsAndConditionsNode\",\"displayName\":\"Accept Terms and Conditions\"}],\"pageDescription\":{\"en\":\"Signing up is fast and easy.
Already have an account? Sign In\"},\"pageHeader\":{\"en\":\"Sign Up\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"762531723\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "935" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.900Z", - "time": 91, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 91 - } - }, - { - "_id": "42bfa8e9990a640a94c1b262cfffc254", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2083, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/EmailSuspendNode/6b70de2f-a625-4957-93d9-37005e33e6e1" - }, - "response": { - "bodySize": 436, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 436, - "text": "{\"_id\":\"6b70de2f-a625-4957-93d9-37005e33e6e1\",\"_rev\":\"-727001800\",\"emailSuspendMessage\":{\"en\":\"An email has been sent to the address you entered. Click the link in that email to proceed.\"},\"emailTemplateName\":\"registration\",\"identityAttribute\":\"userName\",\"emailAttribute\":\"mail\",\"objectLookup\":false,\"_type\":{\"_id\":\"EmailSuspendNode\",\"name\":\"Email Suspend Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-727001800\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "436" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.901Z", - "time": 89, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 89 - } - }, - { - "_id": "5b079e9fec4e3afde25395c3bbe13a45", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2090, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/IncrementLoginCountNode/97a15eb2-a015-4b6d-81a0-be78c3aa1a3b" - }, - "response": { - "bodySize": 243, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 243, - "text": "{\"_id\":\"97a15eb2-a015-4b6d-81a0-be78c3aa1a3b\",\"_rev\":\"-841385771\",\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"IncrementLoginCountNode\",\"name\":\"Increment Login Count\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-841385771\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "243" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.903Z", - "time": 90, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 90 - } - }, - { - "_id": "8aef78690b82b0c825be50ddb6c03294", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2083, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/CreateObjectNode/ad5dcbb3-7335-49b7-b3e7-7d850bb88237" - }, - "response": { - "bodySize": 277, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 277, - "text": "{\"_id\":\"ad5dcbb3-7335-49b7-b3e7-7d850bb88237\",\"_rev\":\"2141109171\",\"identityResource\":\"managed/bravo_user\",\"_type\":{\"_id\":\"CreateObjectNode\",\"name\":\"Create Object\",\"collection\":true},\"_outcomes\":[{\"id\":\"CREATED\",\"displayName\":\"Created\"},{\"id\":\"FAILURE\",\"displayName\":\"Failed\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"2141109171\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "277" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:13 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:13.905Z", - "time": 95, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 95 - } - }, - { - "_id": "84ee6fcdd603002afd0de06e0e205dac", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ValidatedUsernameNode/7fcaf48e-a754-4959-858b-05b2933b825f" - }, - "response": { - "bodySize": 258, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 258, - "text": "{\"_id\":\"7fcaf48e-a754-4959-858b-05b2933b825f\",\"_rev\":\"1966656034\",\"usernameAttribute\":\"userName\",\"validateInput\":true,\"_type\":{\"_id\":\"ValidatedUsernameNode\",\"name\":\"Platform Username\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1966656034\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "258" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.006Z", - "time": 67, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 67 - } - }, - { - "_id": "e02af5ac6fff8dcd2fc1884bd72def5f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/AttributeCollectorNode/d3ce2036-1523-4ce8-b1a2-895a2a036667" - }, - "response": { - "bodySize": 373, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 373, - "text": "{\"_id\":\"d3ce2036-1523-4ce8-b1a2-895a2a036667\",\"_rev\":\"-1158802257\",\"attributesToCollect\":[\"givenName\",\"sn\",\"mail\",\"preferences/marketing\",\"preferences/updates\"],\"identityAttribute\":\"userName\",\"validateInputs\":true,\"required\":true,\"_type\":{\"_id\":\"AttributeCollectorNode\",\"name\":\"Attribute Collector\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1158802257\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "373" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.007Z", - "time": 70, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 70 - } - }, - { - "_id": "d36428bff9578ae95250e17fe9572a43", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ValidatedPasswordNode/3d8709a1-f09f-4d1f-8094-2850e472c1db" - }, - "response": { - "bodySize": 259, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 259, - "text": "{\"_id\":\"3d8709a1-f09f-4d1f-8094-2850e472c1db\",\"_rev\":\"-1470058997\",\"passwordAttribute\":\"password\",\"validateInput\":true,\"_type\":{\"_id\":\"ValidatedPasswordNode\",\"name\":\"Platform Password\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1470058997\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "259" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.008Z", - "time": 76, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 76 - } - }, - { - "_id": "011d16904e3a35cd96f8a79aa52aed48", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2080, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/KbaCreateNode/120c69d3-90b4-4ad4-b7af-380e8b119340" - }, - "response": { - "bodySize": 272, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 272, - "text": "{\"_id\":\"120c69d3-90b4-4ad4-b7af-380e8b119340\",\"_rev\":\"-8134977\",\"message\":{\"en\":\"Select a security question\"},\"allowUserDefinedQuestions\":true,\"_type\":{\"_id\":\"KbaCreateNode\",\"name\":\"KBA Definition\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-8134977\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "272" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 784, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.009Z", - "time": 98, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 98 - } - }, - { - "_id": "26bf89d37e1c2cd3ba66e4ca0c403871", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2095, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/AcceptTermsAndConditionsNode/b4a0e915-c15d-4b83-9c9d-18347d645976" - }, - "response": { - "bodySize": 223, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 223, - "text": "{\"_id\":\"b4a0e915-c15d-4b83-9c9d-18347d645976\",\"_rev\":\"1508860909\",\"_type\":{\"_id\":\"AcceptTermsAndConditionsNode\",\"name\":\"Accept Terms and Conditions\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1508860909\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "223" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.010Z", - "time": 103, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 103 - } - }, - { - "_id": "36686b7634d08c1309e78beb284ffd2c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2043, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/trees/ResetPassword" - }, - "response": { - "bodySize": 1436, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1436, - "text": "{\"_id\":\"ResetPassword\",\"_rev\":\"-2043431286\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"Password Reset\\\"]\"},\"entryNodeId\":\"cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b\",\"innerTreeOnly\":false,\"nodes\":{\"06c97be5-7fdd-4739-aea1-ecc7fe082865\":{\"connections\":{\"outcome\":\"e4c752f9-c625-48c9-9644-a58802fa9e9c\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":453,\"y\":66},\"21b8ddf3-0203-4ae1-ab05-51cf3a3a707a\":{\"connections\":{\"false\":\"06c97be5-7fdd-4739-aea1-ecc7fe082865\",\"true\":\"06c97be5-7fdd-4739-aea1-ecc7fe082865\"},\"displayName\":\"Identify Existing User\",\"nodeType\":\"IdentifyExistingUserNode\",\"x\":271,\"y\":21},\"989f0bf8-a328-4217-b82b-5275d79ca8bd\":{\"connections\":{\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"PATCHED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Patch Object\",\"nodeType\":\"PatchObjectNode\",\"x\":819,\"y\":61},\"cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b\":{\"connections\":{\"outcome\":\"21b8ddf3-0203-4ae1-ab05-51cf3a3a707a\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":103,\"y\":50},\"e4c752f9-c625-48c9-9644-a58802fa9e9c\":{\"connections\":{\"outcome\":\"989f0bf8-a328-4217-b82b-5275d79ca8bd\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":643,\"y\":50}},\"description\":\"Reset Password Tree\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":970,\"y\":79},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":981,\"y\":147},\"startNode\":{\"x\":25,\"y\":25}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-2043431286\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1436" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 788, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.118Z", - "time": 64, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 64 - } - }, - { - "_id": "34877331c04c34b7c9dc8c430ee3ab2f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2083, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/EmailSuspendNode/06c97be5-7fdd-4739-aea1-ecc7fe082865" - }, - "response": { - "bodySize": 433, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 433, - "text": "{\"_id\":\"06c97be5-7fdd-4739-aea1-ecc7fe082865\",\"_rev\":\"-1138066714\",\"emailSuspendMessage\":{\"en\":\"An email has been sent to the address you entered. Click the link in that email to proceed.\"},\"emailTemplateName\":\"resetPassword\",\"identityAttribute\":\"mail\",\"emailAttribute\":\"mail\",\"objectLookup\":true,\"_type\":{\"_id\":\"EmailSuspendNode\",\"name\":\"Email Suspend Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1138066714\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "433" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.188Z", - "time": 108, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 108 - } - }, - { - "_id": "b375b8cad9cf60db8eb88d961e1acd67", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2091, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/IdentifyExistingUserNode/21b8ddf3-0203-4ae1-ab05-51cf3a3a707a" - }, - "response": { - "bodySize": 295, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 295, - "text": "{\"_id\":\"21b8ddf3-0203-4ae1-ab05-51cf3a3a707a\",\"_rev\":\"402776485\",\"identityAttribute\":\"mail\",\"identifier\":\"userName\",\"_type\":{\"_id\":\"IdentifyExistingUserNode\",\"name\":\"Identify Existing User\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"402776485\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "295" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.189Z", - "time": 91, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 91 - } - }, - { - "_id": "9f3b85364d6d523beb7d0e0625343d22", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2082, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PatchObjectNode/989f0bf8-a328-4217-b82b-5275d79ca8bd" - }, - "response": { - "bodySize": 343, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 343, - "text": "{\"_id\":\"989f0bf8-a328-4217-b82b-5275d79ca8bd\",\"_rev\":\"-986085110\",\"identityResource\":\"managed/bravo_user\",\"patchAsObject\":false,\"ignoredFields\":[],\"identityAttribute\":\"mail\",\"_type\":{\"_id\":\"PatchObjectNode\",\"name\":\"Patch Object\",\"collection\":true},\"_outcomes\":[{\"id\":\"PATCHED\",\"displayName\":\"Patched\"},{\"id\":\"FAILURE\",\"displayName\":\"Failed\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-986085110\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "343" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.190Z", - "time": 104, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 104 - } - }, - { - "_id": "31ca4a963d03b81fd47b35d7bc3ce7b2", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b" - }, - "response": { - "bodySize": 444, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 444, - "text": "{\"_id\":\"cc3e1ed2-25f1-47bf-83c6-17084f8b2b2b\",\"_rev\":\"86486605\",\"nodes\":[{\"_id\":\"276afa7c-a680-4cf4-a5f6-d6c78191f5c9\",\"nodeType\":\"AttributeCollectorNode\",\"displayName\":\"Attribute Collector\"}],\"pageDescription\":{\"en\":\"Enter your email address or Sign in\"},\"pageHeader\":{\"en\":\"Reset Password\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"86486605\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "444" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 784, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.191Z", - "time": 78, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 78 - } - }, - { - "_id": "d30d51cf58f60cdd2b01b487719b2669", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/e4c752f9-c625-48c9-9644-a58802fa9e9c" - }, - "response": { - "bodySize": 391, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 391, - "text": "{\"_id\":\"e4c752f9-c625-48c9-9644-a58802fa9e9c\",\"_rev\":\"1593283676\",\"nodes\":[{\"_id\":\"009c19c8-9572-47bb-adb2-1f092c559a43\",\"nodeType\":\"ValidatedPasswordNode\",\"displayName\":\"Platform Password\"}],\"pageDescription\":{\"en\":\"Change password\"},\"pageHeader\":{\"en\":\"Reset Password\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1593283676\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "391" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.192Z", - "time": 87, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 87 - } - }, - { - "_id": "32f01a4c9587c0e0e04cee4c20db99a7", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2089, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/AttributeCollectorNode/276afa7c-a680-4cf4-a5f6-d6c78191f5c9" - }, - "response": { - "bodySize": 307, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 307, - "text": "{\"_id\":\"276afa7c-a680-4cf4-a5f6-d6c78191f5c9\",\"_rev\":\"-1256358519\",\"attributesToCollect\":[\"mail\"],\"identityAttribute\":\"mail\",\"validateInputs\":false,\"required\":true,\"_type\":{\"_id\":\"AttributeCollectorNode\",\"name\":\"Attribute Collector\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1256358519\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "307" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.304Z", - "time": 60, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 60 - } - }, - { - "_id": "415217e3e67f67d1ca703bbadefabe61", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ValidatedPasswordNode/009c19c8-9572-47bb-adb2-1f092c559a43" - }, - "response": { - "bodySize": 257, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 257, - "text": "{\"_id\":\"009c19c8-9572-47bb-adb2-1f092c559a43\",\"_rev\":\"519412822\",\"passwordAttribute\":\"password\",\"validateInput\":true,\"_type\":{\"_id\":\"ValidatedPasswordNode\",\"name\":\"Platform Password\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"519412822\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "257" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.305Z", - "time": 58, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 58 - } - }, - { - "_id": "62a42446e050e3ccf2694f8de78755d1", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2044, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/trees/UpdatePassword" - }, - "response": { - "bodySize": 1887, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 1887, - "text": "{\"_id\":\"UpdatePassword\",\"_rev\":\"1686140325\",\"identityResource\":\"managed/bravo_user\",\"uiConfig\":{\"categories\":\"[\\\"Password Reset\\\"]\"},\"entryNodeId\":\"d1b79744-493a-44fe-bc26-7d324a8caa4e\",\"innerTreeOnly\":false,\"nodes\":{\"0f0904e6-1da3-4cdb-9abf-0d2545016fab\":{\"connections\":{\"false\":\"a3d97b53-e38a-4b24-aed0-a021050eb744\",\"true\":\"20237b34-26cb-4a0b-958f-abb422290d42\"},\"displayName\":\"Attribute Present Decision\",\"nodeType\":\"AttributePresentDecisionNode\",\"x\":288,\"y\":133},\"20237b34-26cb-4a0b-958f-abb422290d42\":{\"connections\":{\"outcome\":\"7d1deabe-cd98-49c8-943f-ca12305775f3\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":526,\"y\":46},\"3990ce1f-cce6-435b-ae1c-f138e89411c1\":{\"connections\":{\"FAILURE\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"PATCHED\":\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\"},\"displayName\":\"Patch Object\",\"nodeType\":\"PatchObjectNode\",\"x\":1062,\"y\":189},\"7d1deabe-cd98-49c8-943f-ca12305775f3\":{\"connections\":{\"false\":\"e301438c-0bd0-429c-ab0c-66126501069a\",\"true\":\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\"},\"displayName\":\"Data Store Decision\",\"nodeType\":\"DataStoreDecisionNode\",\"x\":722,\"y\":45},\"a3d97b53-e38a-4b24-aed0-a021050eb744\":{\"connections\":{\"outcome\":\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\"},\"displayName\":\"Email Suspend Node\",\"nodeType\":\"EmailSuspendNode\",\"x\":659,\"y\":223},\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\":{\"connections\":{\"outcome\":\"3990ce1f-cce6-435b-ae1c-f138e89411c1\"},\"displayName\":\"Page Node\",\"nodeType\":\"PageNode\",\"x\":943,\"y\":30},\"d1b79744-493a-44fe-bc26-7d324a8caa4e\":{\"connections\":{\"outcome\":\"0f0904e6-1da3-4cdb-9abf-0d2545016fab\"},\"displayName\":\"Get Session Data\",\"nodeType\":\"SessionDataNode\",\"x\":122,\"y\":129}},\"description\":\"Update password using active session\",\"staticNodes\":{\"70e691a5-1e33-4ac3-a356-e7b6d60d92e0\":{\"x\":1212,\"y\":128},\"e301438c-0bd0-429c-ab0c-66126501069a\":{\"x\":939,\"y\":290},\"startNode\":{\"x\":50,\"y\":25}},\"mustRun\":false,\"enabled\":true}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1686140325\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "1887" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.369Z", - "time": 56, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 56 - } - }, - { - "_id": "cd0ba6ab903c55a0a243b01ac1d86804", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2095, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/AttributePresentDecisionNode/0f0904e6-1da3-4cdb-9abf-0d2545016fab" - }, - "response": { - "bodySize": 315, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 315, - "text": "{\"_id\":\"0f0904e6-1da3-4cdb-9abf-0d2545016fab\",\"_rev\":\"-1218497043\",\"presentAttribute\":\"password\",\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"AttributePresentDecisionNode\",\"name\":\"Attribute Present Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1218497043\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "315" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.432Z", - "time": 191, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 191 - } - }, - { - "_id": "244d05716c277bc7f0433669d6108d5b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/20237b34-26cb-4a0b-958f-abb422290d42" - }, - "response": { - "bodySize": 408, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 408, - "text": "{\"_id\":\"20237b34-26cb-4a0b-958f-abb422290d42\",\"_rev\":\"1965792723\",\"nodes\":[{\"_id\":\"fe2962fc-4db3-4066-8624-553649afc438\",\"nodeType\":\"ValidatedPasswordNode\",\"displayName\":\"Platform Password\"}],\"pageDescription\":{\"en\":\"Enter current password\"},\"pageHeader\":{\"en\":\"Verify Existing Password\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"1965792723\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "408" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.433Z", - "time": 117, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 117 - } - }, - { - "_id": "051e4bbe6b335db032bf2167832dd996", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2082, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PatchObjectNode/3990ce1f-cce6-435b-ae1c-f138e89411c1" - }, - "response": { - "bodySize": 358, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 358, - "text": "{\"_id\":\"3990ce1f-cce6-435b-ae1c-f138e89411c1\",\"_rev\":\"-1754119521\",\"identityResource\":\"managed/bravo_user\",\"patchAsObject\":false,\"ignoredFields\":[\"userName\"],\"identityAttribute\":\"userName\",\"_type\":{\"_id\":\"PatchObjectNode\",\"name\":\"Patch Object\",\"collection\":true},\"_outcomes\":[{\"id\":\"PATCHED\",\"displayName\":\"Patched\"},{\"id\":\"FAILURE\",\"displayName\":\"Failed\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1754119521\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "358" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.434Z", - "time": 139, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 139 - } - }, - { - "_id": "fad2f1aa2c44a545afaea32b5dd47681", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/DataStoreDecisionNode/7d1deabe-cd98-49c8-943f-ca12305775f3" - }, - "response": { - "bodySize": 238, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 238, - "text": "{\"_id\":\"7d1deabe-cd98-49c8-943f-ca12305775f3\",\"_rev\":\"869693667\",\"_type\":{\"_id\":\"DataStoreDecisionNode\",\"name\":\"Data Store Decision\",\"collection\":true},\"_outcomes\":[{\"id\":\"true\",\"displayName\":\"True\"},{\"id\":\"false\",\"displayName\":\"False\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"869693667\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "238" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.435Z", - "time": 192, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 192 - } - }, - { - "_id": "324768c5d1f988d758f4063e31ff2916", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2083, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/EmailSuspendNode/a3d97b53-e38a-4b24-aed0-a021050eb744" - }, - "response": { - "bodySize": 485, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 485, - "text": "{\"_id\":\"a3d97b53-e38a-4b24-aed0-a021050eb744\",\"_rev\":\"-1059437256\",\"emailSuspendMessage\":{\"en\":\"An email has been sent to your address, please verify your email address to update your password. Click the link in that email to proceed.\"},\"emailTemplateName\":\"updatePassword\",\"identityAttribute\":\"userName\",\"emailAttribute\":\"mail\",\"objectLookup\":true,\"_type\":{\"_id\":\"EmailSuspendNode\",\"name\":\"Email Suspend Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1059437256\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "485" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.437Z", - "time": 181, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 181 - } - }, - { - "_id": "b30742a7c5a0ff409da6bda009a13897", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2075, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/PageNode/d018fcd1-4e22-4160-8c41-63bee51c9cb3" - }, - "response": { - "bodySize": 396, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 396, - "text": "{\"_id\":\"d018fcd1-4e22-4160-8c41-63bee51c9cb3\",\"_rev\":\"-1359533036\",\"nodes\":[{\"_id\":\"21a99653-a7a7-47ee-b650-f493a84bba09\",\"nodeType\":\"ValidatedPasswordNode\",\"displayName\":\"Platform Password\"}],\"pageDescription\":{\"en\":\"Enter new password\"},\"pageHeader\":{\"en\":\"Update Password\"},\"_type\":{\"_id\":\"PageNode\",\"name\":\"Page Node\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-1359533036\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "396" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 787, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.438Z", - "time": 101, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 101 - } - }, - { - "_id": "a6fb99c6a80ad993e5913c48e9e79afa", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2082, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/SessionDataNode/d1b79744-493a-44fe-bc26-7d324a8caa4e" - }, - "response": { - "bodySize": 256, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 256, - "text": "{\"_id\":\"d1b79744-493a-44fe-bc26-7d324a8caa4e\",\"_rev\":\"-716667889\",\"sessionDataKey\":\"UserToken\",\"sharedStateKey\":\"userName\",\"_type\":{\"_id\":\"SessionDataNode\",\"name\":\"Get Session Data\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"-716667889\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "256" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 786, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.439Z", - "time": 164, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 164 - } - }, - { - "_id": "5bc745ac952417f365c25aada6762f09", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ValidatedPasswordNode/fe2962fc-4db3-4066-8624-553649afc438" - }, - "response": { - "bodySize": 258, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 258, - "text": "{\"_id\":\"fe2962fc-4db3-4066-8624-553649afc438\",\"_rev\":\"875005143\",\"passwordAttribute\":\"password\",\"validateInput\":false,\"_type\":{\"_id\":\"ValidatedPasswordNode\",\"name\":\"Platform Password\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"875005143\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "258" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.634Z", - "time": 62, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 62 - } - }, - { - "_id": "7e8c9492a62ad46ad3e99f5145077714", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2088, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/am/json/realms/root/realms/bravo/realm-config/authentication/authenticationtrees/nodes/ValidatedPasswordNode/21a99653-a7a7-47ee-b650-f493a84bba09" - }, - "response": { - "bodySize": 257, - "content": { - "mimeType": "application/json;charset=UTF-8", - "size": 257, - "text": "{\"_id\":\"21a99653-a7a7-47ee-b650-f493a84bba09\",\"_rev\":\"688403743\",\"passwordAttribute\":\"password\",\"validateInput\":true,\"_type\":{\"_id\":\"ValidatedPasswordNode\",\"name\":\"Platform Password\",\"collection\":true},\"_outcomes\":[{\"id\":\"outcome\",\"displayName\":\"Outcome\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "cache-control", - "value": "private" - }, - { - "name": "content-api-version", - "value": "resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"688403743\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "application/json;charset=UTF-8" - }, - { - "name": "content-length", - "value": "257" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:14 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 785, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:14.635Z", - "time": 62, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 62 - } - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/environment_1072573434/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/environment_1072573434/recording.har deleted file mode 100644 index 7c1147c10..000000000 --- a/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/environment_1072573434/recording.har +++ /dev/null @@ -1,212 +0,0 @@ -{ - "log": { - "_recordingName": "config/export/after/environment", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.6" - }, - "entries": [ - { - "_id": "a24d647eb74a9e69a6b0bd9ed23dc6ce", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "accept-api-version", - "value": "protocol=1.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1891, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/environment/secrets" - }, - "response": { - "bodySize": 3827, - "content": { - "mimeType": "application/json", - "size": 3827, - "text": "{\"pagedResultsCookie\":null,\"remainingPagedResults\":-1,\"result\":[{\"_id\":\"esv-admin-token\",\"activeVersion\":\"1\",\"description\":\"Long-lived admin token\",\"encoding\":\"generic\",\"lastChangeDate\":\"2024-03-20T14:46:13.461793Z\",\"lastChangedBy\":\"ba58ff99-76d3-4c69-9c4a-7f150ac70e2c\",\"loaded\":true,\"loadedVersion\":\"1\",\"useInPlaceholders\":true},{\"_id\":\"esv-brando-pingone\",\"activeVersion\":\"4\",\"description\":\"This is to show the connection between PingOne and AIC. \",\"encoding\":\"generic\",\"lastChangeDate\":\"2024-06-24T00:44:06.154598Z\",\"lastChangedBy\":\"Frodo-SA-1701393386423\",\"loaded\":true,\"loadedVersion\":\"4\",\"useInPlaceholders\":true},{\"_id\":\"esv-secret-import-test1\",\"activeVersion\":\"1\",\"description\":\"Secret Import Test 1\",\"encoding\":\"generic\",\"lastChangeDate\":\"2024-06-22T01:13:13.904591Z\",\"lastChangedBy\":\"volker.scheuber@forgerock.com\",\"loaded\":true,\"loadedVersion\":\"1\",\"useInPlaceholders\":true},{\"_id\":\"esv-secret-import-test2\",\"activeVersion\":\"1\",\"description\":\"Secret Import Test 2\",\"encoding\":\"generic\",\"lastChangeDate\":\"2024-06-22T01:13:41.914076Z\",\"lastChangedBy\":\"volker.scheuber@forgerock.com\",\"loaded\":true,\"loadedVersion\":\"1\",\"useInPlaceholders\":true},{\"_id\":\"esv-test-secret\",\"activeVersion\":\"1\",\"description\":\"This is a test secret containing a simple string value.\",\"encoding\":\"generic\",\"lastChangeDate\":\"2024-07-05T17:53:53.682578Z\",\"lastChangedBy\":\"Frodo-SA-1701393386423\",\"loaded\":true,\"loadedVersion\":\"1\",\"useInPlaceholders\":true},{\"_id\":\"esv-test-secret-cert-pem\",\"activeVersion\":\"1\",\"description\":\"This is a test secret from a pem encoded cert file.\",\"encoding\":\"pem\",\"lastChangeDate\":\"2024-01-20T03:48:49.005574Z\",\"lastChangedBy\":\"6bac97fb-0665-4ba9-b66c-1cf70e074d72\",\"loaded\":true,\"loadedVersion\":\"1\",\"useInPlaceholders\":true},{\"_id\":\"esv-test-secret-cert-pem-raw\",\"activeVersion\":\"1\",\"description\":\"This is a test secret from a pem encoded cert file (raw).\",\"encoding\":\"pem\",\"lastChangeDate\":\"2024-01-20T03:49:20.270526Z\",\"lastChangedBy\":\"6bac97fb-0665-4ba9-b66c-1cf70e074d72\",\"loaded\":true,\"loadedVersion\":\"1\",\"useInPlaceholders\":true},{\"_id\":\"esv-test-secret-euler\",\"activeVersion\":\"1\",\"description\":\"A test secret containing the value of Euler's number\",\"encoding\":\"generic\",\"lastChangeDate\":\"2023-12-14T15:27:34.607038Z\",\"lastChangedBy\":\"phales@trivir.com\",\"loaded\":true,\"loadedVersion\":\"1\",\"useInPlaceholders\":true},{\"_id\":\"esv-test-secret-file-base64hmac\",\"activeVersion\":\"1\",\"description\":\"This is a test secret from base64 encoded hmac key file.\",\"encoding\":\"base64hmac\",\"lastChangeDate\":\"2024-01-20T03:46:37.42544Z\",\"lastChangedBy\":\"6bac97fb-0665-4ba9-b66c-1cf70e074d72\",\"loaded\":true,\"loadedVersion\":\"1\",\"useInPlaceholders\":true},{\"_id\":\"esv-test-secret-file-base64hmac-raw\",\"activeVersion\":\"1\",\"description\":\"This is a test secret from base64 encoded hmac key file (raw).\",\"encoding\":\"base64hmac\",\"lastChangeDate\":\"2024-01-20T03:47:03.695151Z\",\"lastChangedBy\":\"6bac97fb-0665-4ba9-b66c-1cf70e074d72\",\"loaded\":true,\"loadedVersion\":\"1\",\"useInPlaceholders\":true},{\"_id\":\"esv-test-secret-pi\",\"activeVersion\":\"1\",\"description\":\"Secret that contains the value of pi\",\"encoding\":\"generic\",\"lastChangeDate\":\"2023-12-14T15:22:28.519043Z\",\"lastChangedBy\":\"phales@trivir.com\",\"loaded\":true,\"loadedVersion\":\"1\",\"useInPlaceholders\":true},{\"_id\":\"esv-test-secret-pi-generic\",\"activeVersion\":\"3\",\"description\":\"\",\"encoding\":\"generic\",\"lastChangeDate\":\"2024-07-15T03:20:09.136266Z\",\"lastChangedBy\":\"Frodo-SA-1701393386423\",\"loaded\":true,\"loadedVersion\":\"3\",\"useInPlaceholders\":true},{\"_id\":\"esv-volkers-test-secret\",\"activeVersion\":\"10\",\"description\":\"Volker's test secret\",\"encoding\":\"generic\",\"lastChangeDate\":\"2024-06-26T01:37:06.116117Z\",\"lastChangedBy\":\"Frodo-SA-1701393386423\",\"loaded\":true,\"loadedVersion\":\"10\",\"useInPlaceholders\":true}],\"resultCount\":13,\"totalPagedResults\":-1,\"totalPagedResultsPolicy\":\"NONE\"}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 267, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:58.274Z", - "time": 317, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 317 - } - }, - { - "_id": "3e8d5f28d2136edf1b00c2f955eaa5fa", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "accept-api-version", - "value": "protocol=1.0,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1893, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/environment/variables" - }, - "response": { - "bodySize": 3247, - "content": { - "mimeType": "application/json", - "size": 3247, - "text": "{\"pagedResultsCookie\":null,\"remainingPagedResults\":-1,\"result\":[{\"_id\":\"esv-blue-piller\",\"description\":\"Zion membership criteria.\",\"expressionType\":\"bool\",\"lastChangeDate\":\"2024-07-05T20:01:11.78347Z\",\"lastChangedBy\":\"Frodo-SA-1701393386423\",\"loaded\":true,\"valueBase64\":\"ZmFsc2U=\"},{\"_id\":\"esv-ipv4-cidr-access-rules\",\"description\":\"IPv4 CIDR access rules: { \\\"allow\\\": [ \\\"address/mask\\\" ] }\",\"expressionType\":\"object\",\"lastChangeDate\":\"2024-07-05T20:01:13.987057Z\",\"lastChangedBy\":\"Frodo-SA-1701393386423\",\"loaded\":true,\"valueBase64\":\"eyAiYWxsb3ciOiBbICIxNDUuMTE4LjAuMC8xNiIsICIxMzIuMzUuMC4wLzE2IiwgIjEwMS4yMjYuMC4wLzE2IiwgIjk5LjcyLjI4LjE4Mi8zMiIgXSB9\"},{\"_id\":\"esv-nebuchadnezzar-crew\",\"description\":\"The crew of the Nebuchadnezzar hovercraft.\",\"expressionType\":\"array\",\"lastChangeDate\":\"2024-07-05T20:01:05.216699Z\",\"lastChangedBy\":\"Frodo-SA-1701393386423\",\"loaded\":true,\"valueBase64\":\"WyJNb3JwaGV1cyIsIlRyaW5pdHkiLCJMaW5rIiwiVGFuayIsIkRvemVyIiwiQXBvYyIsIkN5cGhlciIsIk1vdXNlIiwiTmVvIiwiU3dpdGNoIl0=\"},{\"_id\":\"esv-nebuchadnezzar-crew-structure\",\"description\":\"The structure of the crew of the Nebuchadnezzar hovercraft.\",\"expressionType\":\"object\",\"lastChangeDate\":\"2024-07-05T20:01:07.343325Z\",\"lastChangedBy\":\"Frodo-SA-1701393386423\",\"loaded\":true,\"valueBase64\":\"eyJDYXB0YWluIjoiTW9ycGhldXMiLCJGaXJzdE1hdGUiOiJUcmluaXR5IiwiT3BlcmF0b3IiOlsiTGluayIsIlRhbmsiXSwiTWVkaWMiOiJEb3plciIsIkNyZXdtZW4iOlsiQXBvYyIsIkN5cGhlciIsIk1vdXNlIiwiTmVvIiwiU3dpdGNoIl19\"},{\"_id\":\"esv-neo-age\",\"description\":\"Neo's age in the matrix.\",\"expressionType\":\"int\",\"lastChangeDate\":\"2024-07-05T20:01:09.53586Z\",\"lastChangedBy\":\"Frodo-SA-1701393386423\",\"loaded\":true,\"valueBase64\":\"Mjg=\"},{\"_id\":\"esv-number\",\"description\":\"test number\",\"expressionType\":\"number\",\"lastChangeDate\":\"2024-07-05T19:42:20.943131Z\",\"lastChangedBy\":\"volker.scheuber@forgerock.com\",\"loaded\":true,\"valueBase64\":\"MS4xMzQ=\"},{\"_id\":\"esv-test-var\",\"description\":\"this is a test description\",\"expressionType\":\"string\",\"lastChangeDate\":\"2024-07-05T22:37:25.846244Z\",\"lastChangedBy\":\"Frodo-SA-1701393386423\",\"loaded\":true,\"valueBase64\":\"dGhpcyBpcyBhIHRlc3QgdmFyaWFibGU=\"},{\"_id\":\"esv-test-var-pi\",\"description\":\"This is another test variable.\",\"expressionType\":\"number\",\"lastChangeDate\":\"2024-07-12T17:40:41.283412Z\",\"lastChangedBy\":\"Frodo-SA-1720799681233\",\"loaded\":true,\"valueBase64\":\"My4xNDE1OTI2\"},{\"_id\":\"esv-test-var-pi-string\",\"description\":\"This is another test variable.\",\"expressionType\":\"string\",\"lastChangeDate\":\"2024-07-05T20:01:16.11117Z\",\"lastChangedBy\":\"Frodo-SA-1701393386423\",\"loaded\":true,\"valueBase64\":\"My4xNDE1OTI2\"},{\"_id\":\"esv-test-variable-light\",\"description\":\"Test variable containing the speed of light in meters per second (as an int).\",\"expressionType\":\"int\",\"lastChangeDate\":\"2023-12-14T15:34:13.446903Z\",\"lastChangedBy\":\"phales@trivir.com\",\"loaded\":true,\"valueBase64\":\"Mjk5NzkyNDU4\"},{\"_id\":\"esv-trinity-phone\",\"description\":\"In the opening of The Matrix (1999), the phone number Trinity is calling from is traced to (312)-555-0690\",\"expressionType\":\"string\",\"lastChangeDate\":\"2024-07-05T20:01:03.141204Z\",\"lastChangedBy\":\"Frodo-SA-1701393386423\",\"loaded\":true,\"valueBase64\":\"KDMxMiktNTU1LTA2OTA=\"}],\"resultCount\":11,\"totalPagedResults\":-1,\"totalPagedResultsPolicy\":\"NONE\"}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:59 GMT" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 267, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:58.822Z", - "time": 1021, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 1021 - } - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/openidm_3290118515/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/openidm_3290118515/recording.har deleted file mode 100644 index c39cadf1e..000000000 --- a/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/openidm_3290118515/recording.har +++ /dev/null @@ -1,10343 +0,0 @@ -{ - "log": { - "_recordingName": "config/export/after/openidm", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.6" - }, - "entries": [ - { - "_id": "9cb8561357870863838a9948da32d1e8", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1968, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_fields", - "value": "*" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/bc01b841-b6ec-4691-b9d6-561b306e12db?_fields=%2A" - }, - "response": { - "bodySize": 1407, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1407, - "text": "{\"_id\":\"bc01b841-b6ec-4691-b9d6-561b306e12db\",\"_rev\":\"ff88cb35-6f4e-45f2-8069-84fb0c1d4f54-3890\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1730238488278\",\"description\":\"phales@trivir.com's Frodo Service Account\",\"scopes\":[\"fr:am:*\",\"fr:idc:analytics:*\",\"fr:autoaccess:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:cookie-domain:*\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idm:*\",\"fr:iga:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\",\"fr:idc:proxy-connect:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"PjGCKt42J-GhM2UNfI9eSLvdTire5RQATSbHbdsFuM4\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"v7vTi4rbP0xaJGjdJAWUTYL0gAb3K0WIvssgP7YbaE4VV4Z9TM4FvF4hISiA9rSCouK3VmfQsrAivVMYIDw4I-4MdSLFhVCx0GJQr0Zhw8TY_IyVJXWZq89ZihmZHaEPWjSVQINSd5Q-ZnxRdsKCSk_YG3gbbE-8CcvL3bMfgMSwUxvdq-5svRb5dmW2vRc3o3Z-qmp7VSatQqMnAYtag1BhIVYx0VZVb3bcvlsO2pcoXajkZMF3Lh6pIqwx-XfvjMT8eUsYOizPtZcb44EWGKMqyvmn8n3exVJQb4R5gKa28JI7sGojLHr5Ze6B2D6Nq5b5i1SIhopNmp8_qgGBFtVpCXNlXn4LdHGijVQHq7jDu0TVadVGFrfLSvH6b4QfF7i-5bnBQ4KPeZPGzqwg5ifta5OEcEq8d1Ri6x066T03yqLqCWLQFeWoNIP7CG-FToQa_sFjlsg_DWZfZg19l10rqg5oqmtzZz_vJvKmDpAj7Eg2lEmP4JDjttXGIh352I43_dcTKlZ_UuUjMczqm4rV2o-abF2L4_mPHdMfMTykRgihgpzX2JAyPhBAo8XbkVXr8T69PVi-wE0Y2RXQf_Jdimg3RIGHZEqQuphdZWb87xM1KaDy2CRKBp3qdKcry5-CCoJftm5Eo7zJUbVkBhpWmd-6ETuqlkrkzteccOs\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"ff88cb35-6f4e-45f2-8069-84fb0c1d4f54-3890\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1407" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 668, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.194Z", - "time": 103, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 103 - } - }, - { - "_id": "9cb8561357870863838a9948da32d1e8", - "_order": 1, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1968, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_fields", - "value": "*" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/bc01b841-b6ec-4691-b9d6-561b306e12db?_fields=%2A" - }, - "response": { - "bodySize": 1407, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1407, - "text": "{\"_id\":\"bc01b841-b6ec-4691-b9d6-561b306e12db\",\"_rev\":\"ff88cb35-6f4e-45f2-8069-84fb0c1d4f54-3890\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1730238488278\",\"description\":\"phales@trivir.com's Frodo Service Account\",\"scopes\":[\"fr:am:*\",\"fr:idc:analytics:*\",\"fr:autoaccess:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:cookie-domain:*\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idm:*\",\"fr:iga:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\",\"fr:idc:proxy-connect:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"PjGCKt42J-GhM2UNfI9eSLvdTire5RQATSbHbdsFuM4\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"v7vTi4rbP0xaJGjdJAWUTYL0gAb3K0WIvssgP7YbaE4VV4Z9TM4FvF4hISiA9rSCouK3VmfQsrAivVMYIDw4I-4MdSLFhVCx0GJQr0Zhw8TY_IyVJXWZq89ZihmZHaEPWjSVQINSd5Q-ZnxRdsKCSk_YG3gbbE-8CcvL3bMfgMSwUxvdq-5svRb5dmW2vRc3o3Z-qmp7VSatQqMnAYtag1BhIVYx0VZVb3bcvlsO2pcoXajkZMF3Lh6pIqwx-XfvjMT8eUsYOizPtZcb44EWGKMqyvmn8n3exVJQb4R5gKa28JI7sGojLHr5Ze6B2D6Nq5b5i1SIhopNmp8_qgGBFtVpCXNlXn4LdHGijVQHq7jDu0TVadVGFrfLSvH6b4QfF7i-5bnBQ4KPeZPGzqwg5ifta5OEcEq8d1Ri6x066T03yqLqCWLQFeWoNIP7CG-FToQa_sFjlsg_DWZfZg19l10rqg5oqmtzZz_vJvKmDpAj7Eg2lEmP4JDjttXGIh352I43_dcTKlZ_UuUjMczqm4rV2o-abF2L4_mPHdMfMTykRgihgpzX2JAyPhBAo8XbkVXr8T69PVi-wE0Y2RXQf_Jdimg3RIGHZEqQuphdZWb87xM1KaDy2CRKBp3qdKcry5-CCoJftm5Eo7zJUbVkBhpWmd-6ETuqlkrkzteccOs\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "etag", - "value": "\"ff88cb35-6f4e-45f2-8069-84fb0c1d4f54-3890\"" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1407" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 668, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.215Z", - "time": 84, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 84 - } - }, - { - "_id": "4c1fef66c916c8940b0315dddc564b06", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1915, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/sync" - }, - "response": { - "bodySize": 8380, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 8380, - "text": "{\"_id\":\"sync\",\"mappings\":[{\"_id\":\"sync/managedBravo_user_managedBravo_user\",\"consentRequired\":false,\"displayName\":\"managedBravo_user_managedBravo_user\",\"icon\":null,\"name\":\"managedBravo_user_managedBravo_user\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/bravo_user\",\"syncAfter\":[],\"target\":\"managed/bravo_user\"},{\"_id\":\"sync/managedAlpha_user_managedBravo_user\",\"consentRequired\":true,\"displayName\":\"Test Mapping for Frodo\",\"icon\":null,\"name\":\"managedAlpha_user_managedBravo_user\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[{\"condition\":{\"globals\":{},\"source\":\"console.log(\\\"Hello World!\\\");\",\"type\":\"text/javascript\"},\"default\":[\"Default value string\"],\"source\":\"accountStatus\",\"target\":\"applications\",\"transform\":{\"globals\":{},\"source\":\"console.log(\\\"hello\\\");\",\"type\":\"text/javascript\"}}],\"source\":\"managed/alpha_user\",\"syncAfter\":[\"managedBravo_user_managedBravo_user\"],\"target\":\"managed/bravo_user\"},{\"_id\":\"sync/managedBravo_user_managedAlpha_user\",\"consentRequired\":false,\"displayName\":\"Frodo test mapping\",\"icon\":null,\"name\":\"managedBravo_user_managedAlpha_user\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/bravo_user\",\"syncAfter\":[\"managedBravo_user_managedBravo_user\",\"managedAlpha_user_managedBravo_user\"],\"target\":\"managed/alpha_user\"},{\"_id\":\"sync/AlphaUser2GoogleApps\",\"consentRequired\":false,\"correlationQuery\":[{\"expressionTree\":{\"all\":[\"__NAME__\"]},\"file\":\"ui/correlateTreeToQueryFilter.js\",\"linkQualifier\":\"default\",\"mapping\":\"AlphaUser2GoogleApps\",\"type\":\"text/javascript\"}],\"displayName\":\"AlphaUser2GoogleApps\",\"enableSync\":{\"$bool\":\"&{esv.gac.enable.mapping}\"},\"icon\":null,\"name\":\"AlphaUser2GoogleApps\",\"onCreate\":{\"globals\":{},\"source\":\"target.orgUnitPath = \\\"/NewAccounts\\\";\",\"type\":\"text/javascript\"},\"onUpdate\":{\"globals\":{},\"source\":\"//testing1234\\ntarget.givenName = oldTarget.givenName;\\ntarget.familyName = oldTarget.familyName;\\ntarget.__NAME__ = oldTarget.__NAME__;\",\"type\":\"text/javascript\"},\"policies\":[{\"action\":\"EXCEPTION\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"UNLINK\",\"situation\":\"SOURCE_MISSING\"},{\"action\":{\"globals\":{},\"source\":\"// Timing Constants\\nvar ATTEMPT = 6; // Number of attempts to find the Google user.\\nvar SLEEP_TIME = 500; // Milliseconds between retries.\\nvar SYSTEM_ENDPOINT = \\\"system/GoogleApps/__ACCOUNT__\\\";\\nvar MAPPING_NAME = \\\"AlphaUser2GoogleApps\\\";\\nvar GOOGLE_DOMAIN = identityServer.getProperty(\\\"esv.gac.domain\\\");\\nvar googleEmail = source.userName + \\\"@\\\" + GOOGLE_DOMAIN;\\nvar frUserGUID = source._id;\\nvar resultingAction = \\\"ASYNC\\\";\\n\\n// Get the Google GUID\\nvar linkQueryParams = {'_queryFilter': 'firstId eq \\\"' + frUserGUID + '\\\" and linkType eq \\\"' + MAPPING_NAME + '\\\"'};\\nvar linkResults = openidm.query(\\\"repo/link/\\\", linkQueryParams, null);\\nvar googleGUID;\\n\\nif (linkResults.resultCount === 1) {\\n googleGUID = linkResults.result[0].secondId;\\n}\\n\\nvar queryResults; // Resulting query from looking for the Google user.\\nvar params = {'_queryFilter': '__UID__ eq \\\"' + googleGUID + '\\\"'};\\n\\nfor (var i = 1; i <= ATTEMPT; i++) {\\n queryResults = openidm.query(SYSTEM_ENDPOINT, params);\\n if (queryResults.result && queryResults.result.length > 0) {\\n logger.info(\\\"idmlog: ---AlphaUser2GoogleApps - Missing->UPDATE - Result found in \\\" + i + \\\" attempts. Query result: \\\" + JSON.stringify(queryResults));\\n resultingAction = \\\"UPDATE\\\";\\n break;\\n }\\n java.lang.Thread.sleep(SLEEP_TIME); // Wait before trying again.\\n}\\n\\nif (!queryResults.result || queryResults.resultCount === 0) {\\n logger.warn(\\\"idmlog: ---AlphaUser2GoogleApps - Missing->UNLINK - \\\" + googleEmail + \\\" not found after \\\" + ATTEMPT + \\\" attempts.\\\");\\n resultingAction = \\\"UNLINK\\\";\\n}\\nresultingAction;\\n\",\"type\":\"text/javascript\"},\"situation\":\"MISSING\"},{\"action\":\"EXCEPTION\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"IGNORE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"IGNORE\",\"situation\":\"UNASSIGNED\"},{\"action\":\"UNLINK\",\"situation\":\"LINK_ONLY\"},{\"action\":\"IGNORE\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"LINK\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"}],\"properties\":[{\"condition\":{\"globals\":{},\"source\":\"object.custom_password_encrypted != null\",\"type\":\"text/javascript\"},\"source\":\"custom_password_encrypted\",\"target\":\"__PASSWORD__\",\"transform\":{\"globals\":{},\"source\":\"openidm.decrypt(source);\",\"type\":\"text/javascript\"}},{\"source\":\"cn\",\"target\":\"__NAME__\",\"transform\":{\"globals\":{},\"source\":\"source + \\\"@\\\" + identityServer.getProperty(\\\"esv.gac.domain\\\");\",\"type\":\"text/javascript\"}},{\"source\":\"givenName\",\"target\":\"givenName\"},{\"source\":\"\",\"target\":\"familyName\",\"transform\":{\"globals\":{},\"source\":\"if (source.frIndexedInteger1 > 2 && source.frIndexedInteger1 < 6) {\\n source.sn + \\\" (Student)\\\"\\n} else {\\n source.sn\\n}\",\"type\":\"text/javascript\"}}],\"queuedSync\":{\"enabled\":true,\"maxQueueSize\":20000,\"maxRetries\":5,\"pageSize\":100,\"pollingInterval\":1000,\"postRetryAction\":\"logged-ignore\",\"retryDelay\":1000},\"source\":\"managed/alpha_user\",\"syncAfter\":[\"managedBravo_user_managedBravo_user\",\"managedAlpha_application_managedBravo_application\",\"managedAlpha_user_managedBravo_user\",\"managedBravo_user_managedAlpha_user\"],\"target\":\"system/GoogleApps/__ACCOUNT__\",\"validSource\":{\"globals\":{},\"source\":\"var isGoogleEligible = true;\\n//var logMsg = \\\"idmlog: ---AplhaUser2GAC (username: \\\" + source.userName + \\\" - userType: \\\" + source.frIndexedInteger1 + \\\" cn: \\\" + source.cn + \\\") -\\\";\\nvar logMsg = \\\"idmlog: ---AplhaUser2GAC (username: \\\" + source.userName + \\\" - userType: \\\" + source.frIndexedInteger1 + \\\") -\\\";\\n\\n//Get Applicable userTypes (no Parent accounts)\\nif (source.frIndexedInteger1 !== 0 && source.frIndexedInteger1 !== 1 && source.frIndexedInteger1 !== 3 && source.frIndexedInteger1 !== 4 && source.frIndexedInteger1 !== 5) {\\n\\tisGoogleEligible = false;\\n\\tlogMsg = logMsg + \\\" Account type not eligible.\\\";\\n}\\n\\n//Make sure the account has a valid encrypted password.\\nif (source.custom_password_encrypted == undefined || source.custom_password_encrypted == null) {\\n\\tisGoogleEligible = false;\\n\\tlogMsg = logMsg + \\\" No encrypted password yet.\\\";\\n}\\n\\n//Check that CN exists and has no space.\\nif (source.cn && source.cn.includes(' ')) {\\n\\tisGoogleEligible = false;\\n\\tlogMsg = logMsg + \\\" CN with a space is not allowed.\\\";\\n}\\n\\nif (!isGoogleEligible) {\\n\\tlogMsg = logMsg + \\\" Not sent to Google.\\\"\\n\\tlogger.info(logMsg);\\n} \\n\\nif (isGoogleEligible) {\\n\\tlogMsg = logMsg + \\\" Sent to Google.\\\"\\n\\tlogger.info(logMsg);\\n}\\n\\nisGoogleEligible;\\n\",\"type\":\"text/javascript\"}}]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "8380" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.305Z", - "time": 51, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 51 - } - }, - { - "_id": "4c963e6ac6a0c10bf75de375d8e3da12", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1948, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "_id sw 'mapping'" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config?_queryFilter=_id%20sw%20%27mapping%27" - }, - "response": { - "bodySize": 12816, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 12816, - "text": "{\"result\":[{\"_id\":\"mapping/managedAlpha_assignment_managedBravo_assignment\",\"consentRequired\":false,\"displayName\":\"managedAlpha_assignment_managedBravo_assignment\",\"icon\":null,\"name\":\"managedAlpha_assignment_managedBravo_assignment\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/alpha_assignment\",\"target\":\"managed/bravo_assignment\"},{\"_id\":\"mapping/managedAlpha_user_systemAzureUser\",\"consentRequired\":false,\"defaultSourceFields\":[\"*\",\"assignments\"],\"defaultTargetFields\":[\"*\",\"memberOf\",\"__roles__\",\"__servicePlanIds__\"],\"displayName\":\"managedAlpha_user_systemAzureUser\",\"icon\":null,\"name\":\"managedAlpha_user_systemAzureUser\",\"optimizeAssignmentSync\":true,\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"DELETE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_TARGET_CONFLICT\"},{\"action\":\"INCORPORATE_CHANGES\",\"situation\":\"TARGET_CHANGED\"}],\"properties\":[{\"source\":\"mail\",\"target\":\"mail\"},{\"source\":\"givenName\",\"target\":\"givenName\"},{\"source\":\"sn\",\"target\":\"surname\"},{\"source\":\"\",\"target\":\"displayName\",\"transform\":{\"source\":\"source.givenName+\\\" \\\"+source.sn\",\"type\":\"text/javascript\"}},{\"source\":\"\",\"target\":\"mailNickname\",\"transform\":{\"source\":\"source.givenName[0].toLowerCase()+source.sn.toLowerCase()\",\"type\":\"text/javascript\"}},{\"source\":\"\",\"target\":\"accountEnabled\",\"transform\":{\"source\":\"true\",\"type\":\"text/javascript\"}},{\"condition\":{\"globals\":{},\"source\":\"(typeof oldTarget === 'undefined' || oldTarget === null)\",\"type\":\"text/javascript\"},\"source\":\"\",\"target\":\"__PASSWORD__\",\"transform\":{\"source\":\"\\\"!@#$%\\\"[Math.floor(Math.random()*5)] + Math.random().toString(36).slice(2, 13).toUpperCase()+Math.random().toString(36).slice(2,13)\",\"type\":\"text/javascript\"}}],\"queuedSync\":{\"enabled\":true,\"maxRetries\":0,\"pollingInterval\":10000},\"runTargetPhase\":false,\"source\":\"managed/alpha_user\",\"sourceCondition\":\"/source/effectiveApplications[_id eq \\\"0f357b7e-6c54-4351-a094-43916877d7e5\\\"] or /source/effectiveAssignments[(mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and type eq \\\"__ENTITLEMENT__\\\")]\",\"sourceQuery\":{\"_queryFilter\":\"effectiveApplications[_id eq \\\"0f357b7e-6c54-4351-a094-43916877d7e5\\\"] or lastSync/managedAlpha_user_systemAzureUser pr or /source/effectiveAssignments[(mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and type eq \\\"__ENTITLEMENT__\\\")]\"},\"target\":\"system/Azure/User\"},{\"_id\":\"mapping/managedBravo_group_managedBravo_group\",\"consentRequired\":false,\"displayName\":\"managedBravo_group_managedBravo_group\",\"icon\":null,\"name\":\"managedBravo_group_managedBravo_group\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/bravo_group\",\"target\":\"managed/bravo_group\"},{\"_id\":\"mapping/managedBravo_user_managedBravo_user0\",\"consentRequired\":false,\"displayName\":\"managedBravo_user_managedBravo_user0\",\"icon\":null,\"name\":\"managedBravo_user_managedBravo_user0\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/bravo_user\",\"target\":\"managed/bravo_user\"},{\"_id\":\"mapping/mapping12\",\"consentRequired\":false,\"displayName\":\"mapping12\",\"linkQualifiers\":[],\"name\":\"mapping12\",\"policies\":[],\"properties\":[],\"source\":\"managed/bravo_user\",\"syncAfter\":[],\"target\":\"managed/bravo_user\"},{\"_id\":\"mapping/systemAzure__group___managedAlpha_assignment\",\"consentRequired\":false,\"displayName\":\"systemAzure__group___managedAlpha_assignment\",\"icon\":null,\"name\":\"systemAzure__group___managedAlpha_assignment\",\"policies\":[{\"action\":\"EXCEPTION\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"DELETE\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"CREATE\",\"situation\":\"MISSING\"},{\"action\":\"EXCEPTION\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"DELETE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"EXCEPTION\",\"situation\":\"UNASSIGNED\"},{\"action\":\"EXCEPTION\",\"situation\":\"LINK_ONLY\"},{\"action\":\"IGNORE\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"LINK\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"}],\"properties\":[{\"default\":\"__RESOURCE__\",\"target\":\"type\"},{\"source\":\"\",\"target\":\"description\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.description !== \\\"undefined\\\" && source.description !== null) ? source.description : source._id\",\"type\":\"text/javascript\"}},{\"default\":\"managedAlpha_user_systemAzureUser\",\"target\":\"mapping\"},{\"source\":\"\",\"target\":\"name\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.displayName !== \\\"undefined\\\" && source.displayName !== null) ? source.displayName : source._id\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"attributes\",\"transform\":{\"globals\":{},\"source\":\"[\\n {\\n 'name': 'memberOf',\\n 'value': [source]\\n }\\n]\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"_id\",\"transform\":{\"globals\":{\"sourceObjectSet\":\"system_Azure___GROUP___\"},\"source\":\"sourceObjectSet.concat(source)\",\"type\":\"text/javascript\"}}],\"source\":\"system/Azure/__GROUP__\",\"target\":\"managed/alpha_assignment\",\"targetQuery\":{\"_queryFilter\":\"mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and attributes[name eq \\\"memberOf\\\"]\"}},{\"_id\":\"mapping/systemAzureDirectoryrole_managedAlpha_assignment\",\"consentRequired\":false,\"displayName\":\"systemAzureDirectoryrole_managedAlpha_assignment\",\"icon\":null,\"name\":\"systemAzureDirectoryrole_managedAlpha_assignment\",\"policies\":[{\"action\":\"EXCEPTION\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"DELETE\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"CREATE\",\"situation\":\"MISSING\"},{\"action\":\"EXCEPTION\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"DELETE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"EXCEPTION\",\"situation\":\"UNASSIGNED\"},{\"action\":\"EXCEPTION\",\"situation\":\"LINK_ONLY\"},{\"action\":\"IGNORE\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"LINK\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"}],\"properties\":[{\"default\":\"__RESOURCE__\",\"target\":\"type\"},{\"source\":\"\",\"target\":\"description\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.description !== \\\"undefined\\\" && source.description !== null) ? source.description : source._id\",\"type\":\"text/javascript\"}},{\"default\":\"managedAlpha_user_systemAzureUser\",\"target\":\"mapping\"},{\"source\":\"\",\"target\":\"name\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.displayName !== \\\"undefined\\\" && source.displayName !== null) ? source.displayName : source._id\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"attributes\",\"transform\":{\"globals\":{},\"source\":\"[\\n {\\n 'name': '__roles__',\\n 'value': [source]\\n }\\n]\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"_id\",\"transform\":{\"globals\":{\"sourceObjectSet\":\"system_Azure_directoryRole_\"},\"source\":\"sourceObjectSet.concat(source)\",\"type\":\"text/javascript\"}}],\"source\":\"system/Azure/directoryRole\",\"target\":\"managed/alpha_assignment\",\"targetQuery\":{\"_queryFilter\":\"mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and attributes[name eq \\\"__roles__\\\"]\"}},{\"_id\":\"mapping/systemAzureServiceplan_managedAlpha_assignment\",\"consentRequired\":false,\"displayName\":\"systemAzureServiceplan_managedAlpha_assignment\",\"icon\":null,\"name\":\"systemAzureServiceplan_managedAlpha_assignment\",\"policies\":[{\"action\":\"EXCEPTION\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"DELETE\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"CREATE\",\"situation\":\"MISSING\"},{\"action\":\"EXCEPTION\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"DELETE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"EXCEPTION\",\"situation\":\"UNASSIGNED\"},{\"action\":\"EXCEPTION\",\"situation\":\"LINK_ONLY\"},{\"action\":\"IGNORE\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"LINK\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"}],\"properties\":[{\"default\":\"__RESOURCE__\",\"target\":\"type\"},{\"source\":\"\",\"target\":\"description\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.servicePlanName !== \\\"undefined\\\" && source.servicePlanName !== null) ? source.servicePlanName : source._id\",\"type\":\"text/javascript\"}},{\"default\":\"managedAlpha_user_systemAzureUser\",\"target\":\"mapping\"},{\"source\":\"\",\"target\":\"name\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.servicePlanName !== \\\"undefined\\\" && source.servicePlanName !== null) ? source.servicePlanName : source._id\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"attributes\",\"transform\":{\"globals\":{},\"source\":\"[\\n {\\n 'name': '__servicePlanIds__',\\n 'value': [source]\\n }\\n]\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"_id\",\"transform\":{\"globals\":{\"sourceObjectSet\":\"system_Azure_servicePlan_\"},\"source\":\"sourceObjectSet.concat(source)\",\"type\":\"text/javascript\"}}],\"source\":\"system/Azure/servicePlan\",\"target\":\"managed/alpha_assignment\",\"targetQuery\":{\"_queryFilter\":\"mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and attributes[name eq \\\"__servicePlanIds__\\\"]\"}},{\"_id\":\"mapping/systemAzureUser_managedAlpha_user\",\"consentRequired\":false,\"correlationQuery\":[{\"linkQualifier\":\"default\",\"source\":\"var qry = {'_queryFilter': 'mail eq \\\"' + source.mail + '\\\"'}; qry\",\"type\":\"text/javascript\"}],\"defaultSourceFields\":[\"*\",\"memberOf\",\"__roles__\",\"__servicePlanIds__\"],\"defaultTargetFields\":[\"*\",\"assignments\"],\"displayName\":\"systemAzureUser_managedAlpha_user\",\"icon\":null,\"links\":\"managedAlpha_user_systemAzureUser\",\"name\":\"systemAzureUser_managedAlpha_user\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"ONBOARD\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_TARGET_CONFLICT\"}],\"properties\":[{\"referencedObjectType\":\"__GROUP__\",\"source\":\"memberOf\",\"target\":\"assignments\"},{\"referencedObjectType\":\"directoryRole\",\"source\":\"__roles__\",\"target\":\"assignments\"},{\"referencedObjectType\":\"servicePlan\",\"source\":\"__servicePlanIds__\",\"target\":\"assignments\"}],\"reconSourceQueryPageSize\":999,\"reconSourceQueryPaging\":true,\"runTargetPhase\":false,\"source\":\"system/Azure/User\",\"sourceQueryFullEntry\":true,\"target\":\"managed/alpha_user\"}],\"resultCount\":9,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":9,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "12816" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 666, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.365Z", - "time": 57, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 57 - } - }, - { - "_id": "6033aadd7f5d092978e67850d3c6699c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1954, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "_id sw 'emailTemplate'" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config?_queryFilter=_id%20sw%20%27emailTemplate%27" - }, - "response": { - "bodySize": 18184, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 18184, - "text": "{\"result\":[{\"_id\":\"emailTemplate/baselineDemoEmailVerification\",\"defaultLocale\":\"en\",\"displayName\":\"Baseline Demo Email Verification\",\"enabled\":true,\"from\":\"security@example.com\",\"html\":{\"en\":\"

Email Verification


Hello,

Great to have you on board.



Verify Your Account

Finish the steps of verification for the account by clicking the button below.


Click Here to Verify Your Account

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"message\":{\"en\":\"

Email Verification


Hello,

Great to have you on board.



Verify Your Account

Finish the steps of verfication for the account by clicking the button below.


Click Here to Verify Your Account

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"mimeType\":\"text/html\",\"styles\":\"body {\\n background-color: #f6f6f6;\\n color: #455469;\\n padding: 60px;\\n text-align: center \\n}\\n a {\\n text-decoration: none;\\n color: #109cf1;\\n}\\n h1 {\\n font-size: 40px;\\n text-align: center;\\n}\\n h2 {\\n font-size: 36px;\\n}\\n h3 {\\n font-size: 32px;\\n}\\n h4 {\\n font-size: 28px;\\n}\\n h5 {\\n font-size: 24px;\\n}\\n h6 {\\n font-size: 20px;\\n}\\n .content {\\n background-color: #fff;\\n border-radius: 4px;\\n margin: 0 auto;\\n padding: 48px;\\n width: 600px \\n}\\n .button {\\n background-color: #109cf1;\\n border: none;\\n color: white;\\n padding: 15px 32px;\\n text-align: center;\\n text-decoration: none;\\n display: inline-block;\\n font-size: 16px;\\n}\\n \",\"subject\":{\"en\":\"Please verify your email address\"},\"templateId\":\"baselineDemoEmailVerification\"},{\"_id\":\"emailTemplate/baselineDemoMagicLink\",\"defaultLocale\":\"en\",\"displayName\":\"Baseline Demo Magic Link\",\"enabled\":true,\"from\":\"security@example.com\",\"html\":{\"en\":\"

Welcome back


Hello,

You're receiving this email because you requested a link to sign you into your account.



Finish Signing In

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"message\":{\"en\":\"

Welcome back


Hello,

You're receiving this email because you requested a link to sign you into your account.



Finish Signing In

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"mimeType\":\"text/html\",\"styles\":\"body {\\n background-color: #f6f6f6;\\n color: #455469;\\n padding: 60px;\\n text-align: center \\n}\\n a {\\n text-decoration: none;\\n color: #109cf1;\\n}\\n h1 {\\n font-size: 40px;\\n text-align: center;\\n}\\n h2 {\\n font-size: 36px;\\n}\\n h3 {\\n font-size: 32px;\\n}\\n h4 {\\n font-size: 28px;\\n}\\n h5 {\\n font-size: 24px;\\n}\\n h6 {\\n font-size: 20px;\\n}\\n .content {\\n background-color: #fff;\\n border-radius: 4px;\\n margin: 0 auto;\\n padding: 48px;\\n width: 600px \\n}\\n .button {\\n background-color: #109cf1;\\n border: none;\\n color: white;\\n padding: 15px 32px;\\n text-align: center;\\n text-decoration: none;\\n display: inline-block;\\n font-size: 16px;\\n}\\n \",\"subject\":{\"en\":\"Your sign-in link\"},\"templateId\":\"baselineDemoMagicLink\"},{\"_id\":\"emailTemplate/forgottenUsername\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"{{#if object.userName}}

Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

\",\"fr\":\"{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

\"},\"message\":{\"en\":\"

{{#if object.userName}}Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

\",\"fr\":\"
{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

\"},\"mimeType\":\"text/html\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"Account Information - username\",\"fr\":\"Informations sur le compte - nom d'utilisateur\"}},{\"_id\":\"emailTemplate/idv\",\"defaultLocale\":\"en\",\"description\":\"Identity Verification Invitation\",\"displayName\":\"idv\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"

Click the link below to verify your identity:

Verify my identity now

\",\"fr\":\"

Ceci est votre mail d'inscription.

Lien de vérification email

\"},\"message\":{\"en\":\"

Click the link below to verify your identity:

Verify my identity now

\",\"fr\":\"

Ceci est votre mail d'inscription.

Lien de vérification email

\"},\"mimeType\":\"text/html\",\"name\":\"registration\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"You have been invited to verify your identity\",\"fr\":\"Créer un nouveau compte\"},\"templateId\":\"idv\"},{\"_id\":\"emailTemplate/joiner\",\"advancedEditor\":true,\"defaultLocale\":\"en\",\"description\":\"This email will be sent onCreate of user to the external eMail address provided during creation. An OTP will also be sent to Telephone Number provided during creation to validate the user. The user will then be able to set their password and ForgeRock Push Authenticator\",\"displayName\":\"Joiner\",\"enabled\":true,\"from\":\"\\\"Encore HR\\\" \",\"html\":{\"en\":\"\"},\"message\":{\"en\":\"\\n \\n \\n
\\n

\\n \\n

\\n

Welcome to Encore {{object.givenName}} {{object.sn}}

\\n

Please click on the link below to validate your phone number with a One Time Code that will be sent via SMS or called to you depending on your phone type.

\\n

You will see your UserName and have the ability to set your password that will be used to login to Encore resources.

\\n

As we believe in enhanced security, you will also be setting up a Push Notification for future use.

\\n Click to Join Encore\\n
\\n \\n\"},\"mimeType\":\"text/html\",\"styles\":\"body {\\n background-color: #324054;\\n color: #455469;\\n padding: 60px;\\n text-align: center \\n}\\n a {\\n text-decoration: none;\\n color: #109cf1;\\n}\\n .content {\\n background-color: #fff;\\n border-radius: 4px;\\n margin: 0 auto;\\n padding: 48px;\\n width: 235px \\n}\\n \",\"subject\":{\"en\":\"Welcome to Encore!\"},\"templateId\":\"joiner\"},{\"_id\":\"emailTemplate/registerPasswordlessDevice\",\"defaultLocale\":\"en\",\"description\":\"\",\"displayName\":\"Register Passwordless Device\",\"enabled\":true,\"from\":\"\\\"ForgeRock Identity Cloud\\\" \",\"html\":{\"en\":\"

Welcome back

\\\"alt


Hello,

You're receiving this email because you requested a link to register a new passwordless device.



Register New Device

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"message\":{\"en\":\"

Welcome back

\\\"alt


Hello,

You're receiving this email because you requested a link to register a new passwordless device.



Register New Device

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"mimeType\":\"text/html\",\"styles\":\"body {\\n\\tbackground-color: #324054;\\n\\tcolor: #455469;\\n\\tpadding: 60px;\\n\\ttext-align: center\\n}\\n\\na {\\n\\ttext-decoration: none;\\n\\tcolor: #109cf1;\\n}\\n\\n.content {\\n\\tbackground-color: #fff;\\n\\tborder-radius: 4px;\\n\\tmargin: 0 auto;\\n\\tpadding: 48px;\\n\\twidth: 235px\\n}\\n\",\"subject\":{\"en\":\"Your magic link is here - register new WebAuthN device\"},\"templateId\":\"registerPasswordlessDevice\"},{\"_id\":\"emailTemplate/registration\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"

This is your registration email.

Email verification link

\",\"fr\":\"

Ceci est votre mail d'inscription.

Lien de vérification email

\"},\"message\":{\"en\":\"

This is your registration email.

Email verification link

\",\"fr\":\"

Ceci est votre mail d'inscription.

Lien de vérification email

\"},\"mimeType\":\"text/html\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"Register new account\",\"fr\":\"Créer un nouveau compte\"}},{\"_id\":\"emailTemplate/resetPassword\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"

Click to reset your password

Password reset link

\",\"fr\":\"

Cliquez pour réinitialiser votre mot de passe

Mot de passe lien de réinitialisation

\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Reset your password\",\"fr\":\"Réinitialisez votre mot de passe\"}},{\"_id\":\"emailTemplate/updatePassword\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"

Verify email to update password

Update password link

\"},\"message\":{\"en\":\"

Verify email to update password

Update password link

\"},\"mimeType\":\"text/html\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"Update your password\"}},{\"_id\":\"emailTemplate/welcome\",\"defaultLocale\":\"en\",\"displayName\":\"Welcome\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"

Welcome. Your username is '{{object.userName}}'.

\"},\"message\":{\"en\":\"

Welcome. Your username is '{{object.userName}}'.

\"},\"mimeType\":\"text/html\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"Your account has been created\"},\"templateId\":\"welcome\"}],\"resultCount\":10,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":10,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 671, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.431Z", - "time": 67, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 67 - } - }, - { - "_id": "4f7c200a37e236805c35afa89036bda0", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1928, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config?_queryFilter=true" - }, - "response": { - "bodySize": 346533, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 346533, - "text": "{\"result\":[{\"_id\":\"access\",\"configs\":[{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"info/*\",\"roles\":\"*\"},{\"actions\":\"login,logout\",\"methods\":\"read,action\",\"pattern\":\"authentication\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/fidc/*\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"*\",\"pattern\":\"config/fidc/*\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/ui/themeconfig\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/ui/themerealm\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/uilocale/*\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/fieldPolicy/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"info/uiconfig\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/ui/dashboard\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"methods\":\"query\",\"pattern\":\"info/features\",\"roles\":\"*\"},{\"actions\":\"listPrivileges\",\"methods\":\"action\",\"pattern\":\"privilege\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"privilege/*\",\"roles\":\"*\"},{\"actions\":\"validate\",\"methods\":\"action\",\"pattern\":\"util/validateQueryFilter\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"customAuthz\":\"checkIfAnyFeatureEnabled('kba')\",\"methods\":\"read\",\"pattern\":\"selfservice/kba\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"schema/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"methods\":\"action,query\",\"pattern\":\"consent\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"excludePatterns\":\"repo,repo/*\",\"methods\":\"*\",\"pattern\":\"*\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"\",\"methods\":\"create,read,update,delete,patch,query\",\"pattern\":\"system/*\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"*\",\"methods\":\"script\",\"pattern\":\"system/*\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"test,testConfig,createconfiguration,liveSync,authenticate\",\"methods\":\"action\",\"pattern\":\"system/*\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"*\",\"customAuthz\":\"disallowCommandAction()\",\"methods\":\"*\",\"pattern\":\"repo\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"*\",\"customAuthz\":\"disallowCommandAction()\",\"methods\":\"*\",\"pattern\":\"repo/*\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"command\",\"customAuthz\":\"request.additionalParameters.commandId === 'delete-mapping-links'\",\"methods\":\"action\",\"pattern\":\"repo/link\",\"roles\":\"internal/role/openidm-admin\"},{\"methods\":\"create,read,query,patch\",\"pattern\":\"managed/*\",\"roles\":\"internal/role/platform-provisioning\"},{\"methods\":\"read,query\",\"pattern\":\"internal/role/*\",\"roles\":\"internal/role/platform-provisioning\"},{\"actions\":\"*\",\"methods\":\"create,read,action,update\",\"pattern\":\"profile/*\",\"roles\":\"internal/role/platform-provisioning\"},{\"actions\":\"*\",\"methods\":\"read,action\",\"pattern\":\"policy/*\",\"roles\":\"internal/role/platform-provisioning\"},{\"methods\":\"read\",\"pattern\":\"schema/*\",\"roles\":\"internal/role/platform-provisioning\"},{\"actions\":\"*\",\"methods\":\"action,query\",\"pattern\":\"consent\",\"roles\":\"internal/role/platform-provisioning\"},{\"methods\":\"read\",\"pattern\":\"selfservice/kba\",\"roles\":\"internal/role/platform-provisioning\"},{\"methods\":\"read\",\"pattern\":\"selfservice/terms\",\"roles\":\"internal/role/platform-provisioning\"},{\"methods\":\"read\",\"pattern\":\"identityProviders\",\"roles\":\"internal/role/platform-provisioning\"},{\"actions\":\"sendTemplate\",\"methods\":\"action\",\"pattern\":\"external/email\",\"roles\":\"internal/role/platform-provisioning\"},{\"actions\":\"authenticate\",\"methods\":\"action\",\"pattern\":\"system/*\",\"roles\":\"internal/role/platform-provisioning\"},{\"actions\":\"*\",\"methods\":\"read,action\",\"pattern\":\"policy/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/ui/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"bind,unbind\",\"customAuthz\":\"ownDataOnly()\",\"methods\":\"read,action,delete\",\"pattern\":\"*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"patch\",\"customAuthz\":\"ownDataOnly() && onlyEditableManagedObjectProperties('user', [])\",\"methods\":\"update,patch,action\",\"pattern\":\"*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"patch\",\"customAuthz\":\"(request.resourcePath === 'selfservice/user/' + context.security.authorization.id) && onlyEditableManagedObjectProperties('user', [])\",\"methods\":\"patch,action\",\"pattern\":\"selfservice/user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"patch\",\"customAuthz\":\"isQueryOneOf({'managed/user': ['for-userName']}) && restrictPatchToFields(['password'])\",\"methods\":\"patch,action\",\"pattern\":\"managed/user\",\"roles\":\"internal/role/openidm-cert\"},{\"actions\":\"*\",\"customAuthz\":\"ownRelationshipProperty('_meta', false)\",\"methods\":\"read\",\"pattern\":\"internal/usermeta/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"customAuthz\":\"ownRelationshipProperty('_notifications', true)\",\"methods\":\"read,delete\",\"pattern\":\"internal/notification/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"customAuthz\":\"ownRelationshipCollection(['_meta','_notifications'])\",\"methods\":\"read,query\",\"pattern\":\"managed/user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"\",\"customAuthz\":\"ownDataOnly()\",\"methods\":\"read,delete\",\"pattern\":\"managed/alpha_user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"patch\",\"customAuthz\":\"ownDataOnly() && onlyEditableManagedObjectProperties('alpha_user', [])\",\"methods\":\"update,patch,action\",\"pattern\":\"managed/alpha_user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"customAuthz\":\"ownRelationshipCollection(['_meta','_notifications'])\",\"methods\":\"read,query\",\"pattern\":\"managed/alpha_user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"\",\"customAuthz\":\"ownDataOnly()\",\"methods\":\"read,delete\",\"pattern\":\"managed/bravo_user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"patch\",\"customAuthz\":\"ownDataOnly() && onlyEditableManagedObjectProperties('bravo_user', [])\",\"methods\":\"update,patch,action\",\"pattern\":\"managed/bravo_user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"customAuthz\":\"ownRelationshipCollection(['_meta','_notifications'])\",\"methods\":\"read,query\",\"pattern\":\"managed/bravo_user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"deleteNotificationsForTarget\",\"customAuthz\":\"request.additionalParameters.target === (context.security.authorization.component + '/' + context.security.authorization.id)\",\"methods\":\"action\",\"pattern\":\"notification\",\"roles\":\"internal/role/openidm-authorized\"}]},{\"_id\":\"alphaOrgPrivileges\",\"privileges\":[{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":false},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/ownerIDs eq \\\"{{_id}}\\\" or /parentOwnerIDs eq \\\"{{_id}}\\\"\",\"name\":\"owner-view-update-delete-orgs\",\"path\":\"managed/alpha_organization\",\"permissions\":[\"VIEW\",\"UPDATE\",\"DELETE\"]},{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":false},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/parent pr\",\"name\":\"owner-create-orgs\",\"path\":\"managed/alpha_organization\",\"permissions\":[\"CREATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":false},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrgIDs eq \\\"__org_id_placeholder__\\\"\",\"name\":\"owner-view-update-delete-admins-and-members\",\"path\":\"managed/alpha_user\",\"permissions\":[\"VIEW\",\"DELETE\",\"UPDATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":false},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrg/0 pr and /adminOfOrg/0 pr and !(/ownerOfOrg pr)\",\"name\":\"owner-create-admins\",\"path\":\"managed/alpha_user\",\"permissions\":[\"CREATE\"]},{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":true},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/adminIDs eq \\\"{{_id}}\\\" or /parentAdminIDs eq \\\"{{_id}}\\\"\",\"name\":\"admin-view-update-delete-orgs\",\"path\":\"managed/alpha_organization\",\"permissions\":[\"VIEW\",\"UPDATE\",\"DELETE\"]},{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":true},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/parent pr\",\"name\":\"admin-create-orgs\",\"path\":\"managed/alpha_organization\",\"permissions\":[\"CREATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":true},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrgIDs eq \\\"__org_id_placeholder__\\\"\",\"name\":\"admin-view-update-delete-members\",\"path\":\"managed/alpha_user\",\"permissions\":[\"VIEW\",\"DELETE\",\"UPDATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":true},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrg/0 pr and !(/adminOfOrg pr) and !(/ownerOfOrg pr)\",\"name\":\"admin-create-members\",\"path\":\"managed/alpha_user\",\"permissions\":[\"CREATE\"]}]},{\"_id\":\"audit\",\"auditServiceConfig\":{\"availableAuditEventHandlers\":[\"org.forgerock.audit.handlers.csv.CsvAuditEventHandler\",\"org.forgerock.audit.handlers.elasticsearch.ElasticsearchAuditEventHandler\",\"org.forgerock.audit.handlers.jms.JmsAuditEventHandler\",\"org.forgerock.audit.handlers.json.JsonAuditEventHandler\",\"org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler\",\"org.forgerock.openidm.audit.impl.RepositoryAuditEventHandler\",\"org.forgerock.openidm.audit.impl.RouterAuditEventHandler\",\"org.forgerock.audit.handlers.splunk.SplunkAuditEventHandler\",\"org.forgerock.audit.handlers.syslog.SyslogAuditEventHandler\"],\"caseInsensitiveFields\":[\"/access/http/request/headers\",\"/access/http/response/headers\"],\"filterPolicies\":{\"value\":{\"excludeIf\":[\"/access/http/request/cookies/&{com.iplanet.am.cookie.name}\",\"/access/http/request/cookies/session-jwt\",\"/access/http/request/headers/&{com.sun.identity.auth.cookieName}\",\"/access/http/request/headers/&{com.iplanet.am.cookie.name}\",\"/access/http/request/headers/accept-encoding\",\"/access/http/request/headers/accept-language\",\"/access/http/request/headers/Authorization\",\"/access/http/request/headers/cache-control\",\"/access/http/request/headers/connection\",\"/access/http/request/headers/content-length\",\"/access/http/request/headers/content-type\",\"/access/http/request/headers/proxy-authorization\",\"/access/http/request/headers/X-OpenAM-Password\",\"/access/http/request/headers/X-OpenIDM-Password\",\"/access/http/request/queryParameters/access_token\",\"/access/http/request/queryParameters/IDToken1\",\"/access/http/request/queryParameters/id_token_hint\",\"/access/http/request/queryParameters/Login.Token1\",\"/access/http/request/queryParameters/redirect_uri\",\"/access/http/request/queryParameters/requester\",\"/access/http/request/queryParameters/sessionUpgradeSSOTokenId\",\"/access/http/request/queryParameters/tokenId\",\"/access/http/response/headers/Authorization\",\"/access/http/response/headers/Set-Cookie\",\"/access/http/response/headers/X-OpenIDM-Password\"],\"includeIf\":[]}},\"handlerForQueries\":\"json\"},\"eventHandlers\":[{\"class\":\"org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler\",\"config\":{\"name\":\"json\",\"topics\":[\"access\",\"activity\",\"sync\",\"authentication\",\"config\"]}},{\"class\":\"org.forgerock.openidm.audit.impl.RepositoryAuditEventHandler\",\"config\":{\"enabled\":false,\"name\":\"repo\",\"topics\":[\"access\",\"activity\",\"sync\",\"authentication\",\"config\"]}}],\"eventTopics\":{\"activity\":{\"filter\":{\"actions\":[\"create\",\"update\",\"delete\",\"patch\",\"action\"]},\"passwordFields\":[\"password\"],\"watchedFields\":[]},\"config\":{\"filter\":{\"actions\":[\"create\",\"update\",\"delete\",\"patch\",\"action\"]}}},\"exceptionFormatter\":{\"file\":\"bin/defaults/script/audit/stacktraceFormatter.js\",\"type\":\"text/javascript\"}},{\"_id\":\"authentication\",\"rsFilter\":{\"augmentSecurityContext\":{\"source\":\"require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, security.authorization.component.includes('/alpha_') ? 'alphaOrgPrivileges' : 'bravoOrgPrivileges', 'privilegeAssignments');\",\"type\":\"text/javascript\"},\"cache\":{\"maxTimeout\":\"300 seconds\"},\"scopes\":[\"fr:idm:*\"],\"staticUserMapping\":[{\"localUser\":\"internal/user/idm-provisioning\",\"roles\":[\"internal/role/openidm-admin\"],\"subject\":\"autoid-resource-server\"}],\"subjectMapping\":[{\"additionalUserFields\":[\"adminOfOrg\",\"ownerOfOrg\"],\"defaultRoles\":[\"internal/role/openidm-authorized\"],\"propertyMapping\":{\"sub\":\"_id\"},\"queryOnResource\":\"managed/{{substring realm 1}}_user\",\"userRoles\":\"authzRoles/*\"}]}},{\"_id\":\"bravoOrgPrivileges\",\"privileges\":[{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":false},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/ownerIDs eq \\\"{{_id}}\\\" or /parentOwnerIDs eq \\\"{{_id}}\\\"\",\"name\":\"owner-view-update-delete-orgs\",\"path\":\"managed/bravo_organization\",\"permissions\":[\"VIEW\",\"UPDATE\",\"DELETE\"]},{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":false},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/parent pr\",\"name\":\"owner-create-orgs\",\"path\":\"managed/bravo_organization\",\"permissions\":[\"CREATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":false},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrgIDs eq \\\"__org_id_placeholder__\\\"\",\"name\":\"owner-view-update-delete-admins-and-members\",\"path\":\"managed/bravo_user\",\"permissions\":[\"VIEW\",\"DELETE\",\"UPDATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":false},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrg/0 pr and /adminOfOrg/0 pr and !(/ownerOfOrg pr)\",\"name\":\"owner-create-admins\",\"path\":\"managed/bravo_user\",\"permissions\":[\"CREATE\"]},{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":true},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/adminIDs eq \\\"{{_id}}\\\" or /parentAdminIDs eq \\\"{{_id}}\\\"\",\"name\":\"admin-view-update-delete-orgs\",\"path\":\"managed/bravo_organization\",\"permissions\":[\"VIEW\",\"UPDATE\",\"DELETE\"]},{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":true},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/parent pr\",\"name\":\"admin-create-orgs\",\"path\":\"managed/bravo_organization\",\"permissions\":[\"CREATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":true},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrgIDs eq \\\"__org_id_placeholder__\\\"\",\"name\":\"admin-view-update-delete-members\",\"path\":\"managed/bravo_user\",\"permissions\":[\"VIEW\",\"DELETE\",\"UPDATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":true},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrg/0 pr and !(/adminOfOrg pr) and !(/ownerOfOrg pr)\",\"name\":\"admin-create-members\",\"path\":\"managed/bravo_user\",\"permissions\":[\"CREATE\"]}]},{\"_id\":\"emailTemplate/baselineDemoEmailVerification\",\"defaultLocale\":\"en\",\"displayName\":\"Baseline Demo Email Verification\",\"enabled\":true,\"from\":\"security@example.com\",\"html\":{\"en\":\"

Email Verification


Hello,

Great to have you on board.



Verify Your Account

Finish the steps of verification for the account by clicking the button below.


Click Here to Verify Your Account

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"message\":{\"en\":\"

Email Verification


Hello,

Great to have you on board.



Verify Your Account

Finish the steps of verfication for the account by clicking the button below.


Click Here to Verify Your Account

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"mimeType\":\"text/html\",\"styles\":\"body {\\n background-color: #f6f6f6;\\n color: #455469;\\n padding: 60px;\\n text-align: center \\n}\\n a {\\n text-decoration: none;\\n color: #109cf1;\\n}\\n h1 {\\n font-size: 40px;\\n text-align: center;\\n}\\n h2 {\\n font-size: 36px;\\n}\\n h3 {\\n font-size: 32px;\\n}\\n h4 {\\n font-size: 28px;\\n}\\n h5 {\\n font-size: 24px;\\n}\\n h6 {\\n font-size: 20px;\\n}\\n .content {\\n background-color: #fff;\\n border-radius: 4px;\\n margin: 0 auto;\\n padding: 48px;\\n width: 600px \\n}\\n .button {\\n background-color: #109cf1;\\n border: none;\\n color: white;\\n padding: 15px 32px;\\n text-align: center;\\n text-decoration: none;\\n display: inline-block;\\n font-size: 16px;\\n}\\n \",\"subject\":{\"en\":\"Please verify your email address\"},\"templateId\":\"baselineDemoEmailVerification\"},{\"_id\":\"emailTemplate/baselineDemoMagicLink\",\"defaultLocale\":\"en\",\"displayName\":\"Baseline Demo Magic Link\",\"enabled\":true,\"from\":\"security@example.com\",\"html\":{\"en\":\"

Welcome back


Hello,

You're receiving this email because you requested a link to sign you into your account.



Finish Signing In

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"message\":{\"en\":\"

Welcome back


Hello,

You're receiving this email because you requested a link to sign you into your account.



Finish Signing In

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"mimeType\":\"text/html\",\"styles\":\"body {\\n background-color: #f6f6f6;\\n color: #455469;\\n padding: 60px;\\n text-align: center \\n}\\n a {\\n text-decoration: none;\\n color: #109cf1;\\n}\\n h1 {\\n font-size: 40px;\\n text-align: center;\\n}\\n h2 {\\n font-size: 36px;\\n}\\n h3 {\\n font-size: 32px;\\n}\\n h4 {\\n font-size: 28px;\\n}\\n h5 {\\n font-size: 24px;\\n}\\n h6 {\\n font-size: 20px;\\n}\\n .content {\\n background-color: #fff;\\n border-radius: 4px;\\n margin: 0 auto;\\n padding: 48px;\\n width: 600px \\n}\\n .button {\\n background-color: #109cf1;\\n border: none;\\n color: white;\\n padding: 15px 32px;\\n text-align: center;\\n text-decoration: none;\\n display: inline-block;\\n font-size: 16px;\\n}\\n \",\"subject\":{\"en\":\"Your sign-in link\"},\"templateId\":\"baselineDemoMagicLink\"},{\"_id\":\"emailTemplate/forgottenUsername\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"{{#if object.userName}}

Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

\",\"fr\":\"{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

\"},\"message\":{\"en\":\"

{{#if object.userName}}Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

\",\"fr\":\"
{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

\"},\"mimeType\":\"text/html\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"Account Information - username\",\"fr\":\"Informations sur le compte - nom d'utilisateur\"}},{\"_id\":\"emailTemplate/frEmailUpdated\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Your account email has changed

Your ForgeRock Identity Cloud email has been changed. If you did not request this change, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Your email has been updated\"}},{\"_id\":\"emailTemplate/frForgotUsername\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Forgot your username?

Your username is {{ object.userName }}.

Sign In to Your Account

If you didn't request this, please ignore this email.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Forgot Username\"}},{\"_id\":\"emailTemplate/frOnboarding\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Your account is ready

Your ForgeRock Identity Cloud account is ready. Click the button below to complete registration and access your environment.

Complete Registration

If you did not request this account, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Complete your ForgeRock Identity Cloud registration\"}},{\"_id\":\"emailTemplate/frPasswordUpdated\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Your account password has changed

Your ForgeRock Identity Cloud password has been changed. If you did not request this change, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Your password has been updated\"}},{\"_id\":\"emailTemplate/frProfileUpdated\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Your account profile has changed

Your ForgeRock Identity Cloud profile has been changed. If you did not request this change, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Your profile has been updated\"}},{\"_id\":\"emailTemplate/frResetPassword\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Reset your password

It seems you have forgotten the password for your ForgeRock Identity Cloud account. Click the button below to reset your password and access your environment.

Reset Password

If you did not request to reset your password, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Reset your password\"}},{\"_id\":\"emailTemplate/frUsernameUpdated\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Your account username has changed

Your ForgeRock Identity Cloud username has been changed. If you did not request this change, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Your username has been updated\"}},{\"_id\":\"emailTemplate/idv\",\"defaultLocale\":\"en\",\"description\":\"Identity Verification Invitation\",\"displayName\":\"idv\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"

Click the link below to verify your identity:

Verify my identity now

\",\"fr\":\"

Ceci est votre mail d'inscription.

Lien de vérification email

\"},\"message\":{\"en\":\"

Click the link below to verify your identity:

Verify my identity now

\",\"fr\":\"

Ceci est votre mail d'inscription.

Lien de vérification email

\"},\"mimeType\":\"text/html\",\"name\":\"registration\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"You have been invited to verify your identity\",\"fr\":\"Créer un nouveau compte\"},\"templateId\":\"idv\"},{\"_id\":\"emailTemplate/joiner\",\"advancedEditor\":true,\"defaultLocale\":\"en\",\"description\":\"This email will be sent onCreate of user to the external eMail address provided during creation. An OTP will also be sent to Telephone Number provided during creation to validate the user. The user will then be able to set their password and ForgeRock Push Authenticator\",\"displayName\":\"Joiner\",\"enabled\":true,\"from\":\"\\\"Encore HR\\\" \",\"html\":{\"en\":\"\"},\"message\":{\"en\":\"\\n \\n \\n
\\n

\\n \\n

\\n

Welcome to Encore {{object.givenName}} {{object.sn}}

\\n

Please click on the link below to validate your phone number with a One Time Code that will be sent via SMS or called to you depending on your phone type.

\\n

You will see your UserName and have the ability to set your password that will be used to login to Encore resources.

\\n

As we believe in enhanced security, you will also be setting up a Push Notification for future use.

\\n Click to Join Encore\\n
\\n \\n\"},\"mimeType\":\"text/html\",\"styles\":\"body {\\n background-color: #324054;\\n color: #455469;\\n padding: 60px;\\n text-align: center \\n}\\n a {\\n text-decoration: none;\\n color: #109cf1;\\n}\\n .content {\\n background-color: #fff;\\n border-radius: 4px;\\n margin: 0 auto;\\n padding: 48px;\\n width: 235px \\n}\\n \",\"subject\":{\"en\":\"Welcome to Encore!\"},\"templateId\":\"joiner\"},{\"_id\":\"emailTemplate/registerPasswordlessDevice\",\"defaultLocale\":\"en\",\"description\":\"\",\"displayName\":\"Register Passwordless Device\",\"enabled\":true,\"from\":\"\\\"ForgeRock Identity Cloud\\\" \",\"html\":{\"en\":\"

Welcome back

\\\"alt


Hello,

You're receiving this email because you requested a link to register a new passwordless device.



Register New Device

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"message\":{\"en\":\"

Welcome back

\\\"alt


Hello,

You're receiving this email because you requested a link to register a new passwordless device.



Register New Device

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"mimeType\":\"text/html\",\"styles\":\"body {\\n\\tbackground-color: #324054;\\n\\tcolor: #455469;\\n\\tpadding: 60px;\\n\\ttext-align: center\\n}\\n\\na {\\n\\ttext-decoration: none;\\n\\tcolor: #109cf1;\\n}\\n\\n.content {\\n\\tbackground-color: #fff;\\n\\tborder-radius: 4px;\\n\\tmargin: 0 auto;\\n\\tpadding: 48px;\\n\\twidth: 235px\\n}\\n\",\"subject\":{\"en\":\"Your magic link is here - register new WebAuthN device\"},\"templateId\":\"registerPasswordlessDevice\"},{\"_id\":\"emailTemplate/registration\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"

This is your registration email.

Email verification link

\",\"fr\":\"

Ceci est votre mail d'inscription.

Lien de vérification email

\"},\"message\":{\"en\":\"

This is your registration email.

Email verification link

\",\"fr\":\"

Ceci est votre mail d'inscription.

Lien de vérification email

\"},\"mimeType\":\"text/html\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"Register new account\",\"fr\":\"Créer un nouveau compte\"}},{\"_id\":\"emailTemplate/resetPassword\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"

Click to reset your password

Password reset link

\",\"fr\":\"

Cliquez pour réinitialiser votre mot de passe

Mot de passe lien de réinitialisation

\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Reset your password\",\"fr\":\"Réinitialisez votre mot de passe\"}},{\"_id\":\"emailTemplate/updatePassword\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"

Verify email to update password

Update password link

\"},\"message\":{\"en\":\"

Verify email to update password

Update password link

\"},\"mimeType\":\"text/html\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"Update your password\"}},{\"_id\":\"emailTemplate/welcome\",\"defaultLocale\":\"en\",\"displayName\":\"Welcome\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"

Welcome. Your username is '{{object.userName}}'.

\"},\"message\":{\"en\":\"

Welcome. Your username is '{{object.userName}}'.

\"},\"mimeType\":\"text/html\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"Your account has been created\"},\"templateId\":\"welcome\"},{\"_id\":\"entityId\",\"defaultLocale\":\"en\",\"displayName\":\"Frodo Test Email Template Three\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"

You started a login or profile update that requires MFA.

Click to Proceed

\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Multi-Factor Email for Identity Cloud login\"}},{\"_id\":\"external.email\",\"auth\":{\"enable\":true,\"password\":\"&{aic.customer.sasl.pass}\",\"username\":\"&{aic.customer.sasl.user|donotuse@pingidentity.com}\"},\"connectiontimeout\":300000,\"debug\":false,\"from\":\"&{email.sender.address}\",\"host\":\"&{aic.smtp.relay.host|smtp-relay.fr-platform.svc.cluster.local}\",\"port\":25,\"smtpProperties\":[],\"ssl\":{\"enable\":false},\"starttls\":{\"enable\":false},\"threadPoolSize\":20,\"timeout\":300000,\"writetimeout\":300000},{\"_id\":\"external.emailDefault\",\"auth\":{\"enable\":true,\"password\":\"&{aic.customer.sasl.pass}\",\"username\":\"&{aic.customer.sasl.user|donotuse@pingidentity.com}\"},\"connectiontimeout\":300000,\"debug\":false,\"from\":\"&{email.sender.address}\",\"host\":\"&{aic.smtp.relay.host|smtp-relay.fr-platform.svc.cluster.local}\",\"port\":25,\"smtpProperties\":[],\"ssl\":{\"enable\":false},\"starttls\":{\"enable\":false},\"threadPoolSize\":20,\"timeout\":300000,\"writetimeout\":300000},{\"_id\":\"fidc/federation-EntraID\",\"groups\":{\"claim\":\"groups\",\"mappings\":{\"super-admins\":[\"750d8eca-c15e-4944-a8a7-537a0f3e8dd6\"],\"tenant-admins\":[\"93b762fa-5982-4cc0-9f5b-88ab8b3e2589\"]}}},{\"_id\":\"fieldPolicy/alpha_user\",\"allowPreEncodedPasswords\":true,\"defaultPasswordStorageScheme\":[{\"_id\":\"PBKDF2-HMAC-SHA256\"}],\"deprecatedPasswordStorageScheme\":[\"cn=Bcrypt,cn=Password Storage Schemes,cn=config\",\"cn=PBKDF2-HMAC-SHA256,cn=Password Storage Schemes,cn=config\",\"cn=PBKDF2-HMAC-SHA512,cn=Password Storage Schemes,cn=config\",\"cn=PBKDF2,cn=Password Storage Schemes,cn=config\",\"cn=Salted SHA-1,cn=Password Storage Schemes,cn=config\",\"cn=Salted SHA-256,cn=Password Storage Schemes,cn=config\",\"cn=Salted SHA-384,cn=Password Storage Schemes,cn=config\",\"cn=Salted SHA-512,cn=Password Storage Schemes,cn=config\",\"cn=SCRAM-SHA-256,cn=Password Storage Schemes,cn=config\",\"cn=SCRAM-SHA-512,cn=Password Storage Schemes,cn=config\"],\"passwordAttribute\":\"password\",\"resourceCollection\":\"managed/alpha_user\",\"type\":\"password-policy\",\"validator\":[{\"_id\":\"alpha_userPasswordPolicy-length-based-password-validator\",\"enabled\":true,\"maxPasswordLength\":0,\"minPasswordLength\":10,\"type\":\"length-based\"},{\"_id\":\"alpha_userPasswordPolicy-attribute-value-password-validator\",\"checkSubstrings\":true,\"enabled\":true,\"matchAttribute\":[\"mail\",\"userName\",\"givenName\",\"sn\"],\"minSubstringLength\":5,\"testReversedPassword\":true,\"type\":\"attribute-value\"},{\"_id\":\"alpha_userPasswordPolicy-character-set-password-validator\",\"allowUnclassifiedCharacters\":true,\"characterSet\":[\"0:abcdefghijklmnopqrstuvwxyz\",\"0:ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\"0:0123456789\",\"0:~!@#$%^&*()-_=+[]{}|;:,.<>/?\\\"'\\\\`\"],\"enabled\":true,\"minCharacterSets\":4,\"type\":\"character-set\"}]},{\"_id\":\"fieldPolicy/bravo_user\",\"allowPreEncodedPasswords\":true,\"defaultPasswordStorageScheme\":[{\"_id\":\"PBKDF2-HMAC-SHA256\"}],\"deprecatedPasswordStorageScheme\":[\"cn=Bcrypt,cn=Password Storage Schemes,cn=config\",\"cn=PBKDF2-HMAC-SHA256,cn=Password Storage Schemes,cn=config\",\"cn=PBKDF2-HMAC-SHA512,cn=Password Storage Schemes,cn=config\",\"cn=PBKDF2,cn=Password Storage Schemes,cn=config\",\"cn=Salted SHA-1,cn=Password Storage Schemes,cn=config\",\"cn=Salted SHA-256,cn=Password Storage Schemes,cn=config\",\"cn=Salted SHA-384,cn=Password Storage Schemes,cn=config\",\"cn=Salted SHA-512,cn=Password Storage Schemes,cn=config\",\"cn=SCRAM-SHA-256,cn=Password Storage Schemes,cn=config\",\"cn=SCRAM-SHA-512,cn=Password Storage Schemes,cn=config\"],\"passwordAttribute\":\"password\",\"resourceCollection\":\"managed/bravo_user\",\"type\":\"password-policy\",\"validator\":[{\"_id\":\"bravo_userPasswordPolicy-length-based-password-validator\",\"enabled\":true,\"maxPasswordLength\":0,\"minPasswordLength\":8,\"type\":\"length-based\"},{\"_id\":\"bravo_userPasswordPolicy-attribute-value-password-validator\",\"checkSubstrings\":true,\"enabled\":true,\"matchAttribute\":[\"mail\",\"userName\",\"givenName\",\"sn\"],\"minSubstringLength\":5,\"testReversedPassword\":true,\"type\":\"attribute-value\"},{\"_id\":\"bravo_userPasswordPolicy-character-set-password-validator\",\"allowUnclassifiedCharacters\":true,\"characterSet\":[\"1:abcdefghijklmnopqrstuvwxyz\",\"1:ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\"1:0123456789\",\"1:~!@#$%^&*()-_=+[]{}|;:,.<>/?\\\"'\\\\`\"],\"enabled\":true,\"type\":\"character-set\"}]},{\"_id\":\"internal\",\"objects\":[{\"name\":\"role\",\"properties\":{\"authzMembers\":{\"items\":{\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}]}}}}]},{\"_id\":\"managed\",\"objects\":[{\"lastSync\":{\"effectiveAssignmentsProperty\":\"effectiveAssignments\",\"lastSyncProperty\":\"lastSync\"},\"meta\":{\"property\":\"_meta\",\"resourceCollection\":\"managed/alpha_usermeta\",\"trackedProperties\":[\"createDate\",\"lastChanged\"]},\"name\":\"alpha_user\",\"notifications\":{},\"schema\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"icon\":\"fa-user\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User\",\"mat-icon\":\"people\",\"order\":[\"_id\",\"userName\",\"password\",\"givenName\",\"cn\",\"sn\",\"mail\",\"profileImage\",\"description\",\"accountStatus\",\"telephoneNumber\",\"postalAddress\",\"city\",\"postalCode\",\"country\",\"stateProvince\",\"roles\",\"assignments\",\"groups\",\"applications\",\"manager\",\"authzRoles\",\"reports\",\"effectiveRoles\",\"effectiveAssignments\",\"effectiveGroups\",\"effectiveApplications\",\"lastSync\",\"kbaInfo\",\"preferences\",\"consentedMappings\",\"ownerOfOrg\",\"adminOfOrg\",\"memberOfOrg\",\"memberOfOrgIDs\",\"ownerOfApp\",\"frIndexedString1\",\"frIndexedString2\",\"frIndexedString3\",\"frIndexedString4\",\"frIndexedString5\",\"frUnindexedString1\",\"frUnindexedString2\",\"frUnindexedString3\",\"frUnindexedString4\",\"frUnindexedString5\",\"frIndexedMultivalued1\",\"frIndexedMultivalued2\",\"frIndexedMultivalued3\",\"frIndexedMultivalued4\",\"frIndexedMultivalued5\",\"frUnindexedMultivalued1\",\"frUnindexedMultivalued2\",\"frUnindexedMultivalued3\",\"frUnindexedMultivalued4\",\"frUnindexedMultivalued5\",\"frIndexedDate1\",\"frIndexedDate2\",\"frIndexedDate3\",\"frIndexedDate4\",\"frIndexedDate5\",\"frUnindexedDate1\",\"frUnindexedDate2\",\"frUnindexedDate3\",\"frUnindexedDate4\",\"frUnindexedDate5\",\"frIndexedInteger1\",\"frIndexedInteger2\",\"frIndexedInteger3\",\"frIndexedInteger4\",\"frIndexedInteger5\",\"frUnindexedInteger1\",\"frUnindexedInteger2\",\"frUnindexedInteger3\",\"frUnindexedInteger4\",\"frUnindexedInteger5\",\"assignedDashboard\"],\"properties\":{\"_id\":{\"description\":\"User ID\",\"isPersonal\":false,\"policies\":[{\"params\":{\"forbiddenChars\":[\"/\"]},\"policyId\":\"cannot-contain-characters\"}],\"searchable\":false,\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":false},\"accountStatus\":{\"default\":\"active\",\"description\":\"Status\",\"isPersonal\":false,\"searchable\":true,\"title\":\"Status\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"adminOfOrg\":{\"items\":{\"notifySelf\":false,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":true,\"path\":\"managed/alpha_organization\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"admins\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Organizations I Administer\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"aliasList\":{\"description\":\"List of identity aliases used primarily to record social IdP subjects for this user\",\"isVirtual\":false,\"items\":{\"title\":\"User Alias Names Items\",\"type\":\"string\"},\"returnByDefault\":false,\"searchable\":false,\"title\":\"User Alias Names List\",\"type\":\"array\",\"userEditable\":true,\"viewable\":false},\"applications\":{\"description\":\"Applications\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:applications\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:applications:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Groups Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Application\",\"path\":\"managed/alpha_application\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[\"name\"]}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Groups Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Applications\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":false},\"assignedDashboard\":{\"description\":\"List of items to click on for this user\",\"isVirtual\":true,\"items\":{\"title\":\"Assigned Dashboard Items\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"name\"],\"referencedRelationshipFields\":[[\"roles\",\"applications\"],[\"applications\"]]},\"searchable\":false,\"title\":\"Assigned Dashboard\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"assignments\":{\"description\":\"Assignments\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Provisioning Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Assignment\",\"path\":\"managed/alpha_assignment\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Assignments Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Assignments\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"authzRoles\":{\"description\":\"Authorization Roles\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Authorization Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Internal Role\",\"path\":\"internal/role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"authzMembers\",\"reverseRelationship\":true,\"title\":\"Authorization Roles Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Authorization Roles\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"city\":{\"description\":\"City\",\"isPersonal\":false,\"title\":\"City\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"cn\":{\"default\":\"{{givenName}} {{sn}}\",\"description\":\"Common Name\",\"isPersonal\":true,\"scope\":\"private\",\"searchable\":false,\"title\":\"Common Name\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"consentedMappings\":{\"description\":\"Consented Mappings\",\"isPersonal\":false,\"isVirtual\":false,\"items\":{\"items\":{\"order\":[\"mapping\",\"consentDate\"],\"properties\":{\"consentDate\":{\"description\":\"Consent Date\",\"searchable\":true,\"title\":\"Consent Date\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"mapping\":{\"description\":\"Mapping\",\"searchable\":true,\"title\":\"Mapping\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true}},\"required\":[\"mapping\",\"consentDate\"],\"title\":\"Consented Mappings Item\",\"type\":\"object\"},\"title\":\"Consented Mappings Items\",\"type\":\"array\"},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Consented Mappings\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"country\":{\"description\":\"Country\",\"isPersonal\":false,\"title\":\"Country\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"description\":{\"description\":\"Description\",\"isPersonal\":false,\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"effectiveApplications\":{\"description\":\"Effective Applications\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Assigned Application Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedObjectFields\":[\"name\"],\"referencedRelationshipFields\":[[\"roles\",\"applications\"],[\"applications\"]]},\"returnByDefault\":true,\"title\":\"Effective Applications\",\"type\":\"array\",\"viewable\":false},\"effectiveAssignments\":{\"description\":\"Effective Assignments\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Assignments Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedObjectFields\":[\"*\"],\"referencedRelationshipFields\":[[\"roles\",\"assignments\"],[\"assignments\"]]},\"returnByDefault\":true,\"title\":\"Effective Assignments\",\"type\":\"array\",\"usageDescription\":\"\",\"viewable\":false},\"effectiveGroups\":{\"description\":\"Effective Groups\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Groups Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedRelationshipFields\":[\"groups\"]},\"returnByDefault\":true,\"title\":\"Effective Groups\",\"type\":\"array\",\"usageDescription\":\"\",\"viewable\":false},\"effectiveRoles\":{\"description\":\"Effective Roles\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Roles Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedRelationshipFields\":[\"roles\"]},\"returnByDefault\":true,\"title\":\"Effective Roles\",\"type\":\"array\",\"usageDescription\":\"\",\"viewable\":false},\"frIndexedDate1\":{\"description\":\"Generic Indexed Date 1\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate2\":{\"description\":\"Generic Indexed Date 2\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate3\":{\"description\":\"Generic Indexed Date 3\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate4\":{\"description\":\"Generic Indexed Date 4\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate5\":{\"description\":\"Generic Indexed Date 5\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger1\":{\"description\":\"Generic Indexed Integer 1\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 1\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger2\":{\"description\":\"Generic Indexed Integer 2\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 2\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger3\":{\"description\":\"Generic Indexed Integer 3\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 3\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger4\":{\"description\":\"Generic Indexed Integer 4\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 4\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger5\":{\"description\":\"Generic Indexed Integer 5\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 5\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued1\":{\"description\":\"Generic Indexed Multivalue 1\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 1\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued2\":{\"description\":\"Generic Indexed Multivalue 2\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 2\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued3\":{\"description\":\"Generic Indexed Multivalue 3\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 3\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued4\":{\"description\":\"Generic Indexed Multivalue 4\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 4\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued5\":{\"description\":\"Generic Indexed Multivalue 5\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 5\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString1\":{\"description\":\"Generic Indexed String 1\",\"isPersonal\":false,\"title\":\"Generic Indexed String 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString2\":{\"description\":\"Generic Indexed String 2\",\"isPersonal\":false,\"title\":\"Generic Indexed String 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString3\":{\"description\":\"Generic Indexed String 3\",\"isPersonal\":false,\"title\":\"Generic Indexed String 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString4\":{\"description\":\"Generic Indexed String 4\",\"isPersonal\":false,\"title\":\"Generic Indexed String 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString5\":{\"description\":\"Generic Indexed String 5\",\"isPersonal\":false,\"title\":\"Generic Indexed String 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate1\":{\"description\":\"Generic Unindexed Date 1\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate2\":{\"description\":\"Generic Unindexed Date 2\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate3\":{\"description\":\"Generic Unindexed Date 3\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate4\":{\"description\":\"Generic Unindexed Date 4\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate5\":{\"description\":\"Generic Unindexed Date 5\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger1\":{\"description\":\"Generic Unindexed Integer 1\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 1\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger2\":{\"description\":\"Generic Unindexed Integer 2\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 2\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger3\":{\"description\":\"Generic Unindexed Integer 3\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 3\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger4\":{\"description\":\"Generic Unindexed Integer 4\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 4\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger5\":{\"description\":\"Generic Unindexed Integer 5\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 5\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued1\":{\"description\":\"Generic Unindexed Multivalue 1\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 1\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued2\":{\"description\":\"Generic Unindexed Multivalue 2\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 2\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued3\":{\"description\":\"Generic Unindexed Multivalue 3\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 3\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued4\":{\"description\":\"Generic Unindexed Multivalue 4\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 4\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued5\":{\"description\":\"Generic Unindexed Multivalue 5\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 5\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString1\":{\"description\":\"Generic Unindexed String 1\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString2\":{\"description\":\"Generic Unindexed String 2\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString3\":{\"description\":\"Generic Unindexed String 3\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString4\":{\"description\":\"Generic Unindexed String 4\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString5\":{\"description\":\"Generic Unindexed String 5\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"givenName\":{\"description\":\"First Name\",\"isPersonal\":true,\"searchable\":true,\"title\":\"First Name\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"groups\":{\"description\":\"Groups\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:groups\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:groups:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Groups Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Group\",\"path\":\"managed/alpha_group\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Groups Items\",\"type\":\"relationship\",\"validate\":true},\"relationshipGrantTemporalConstraintsEnforced\":false,\"returnByDefault\":false,\"title\":\"Groups\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"kbaInfo\":{\"description\":\"KBA Info\",\"isPersonal\":true,\"items\":{\"order\":[\"answer\",\"customQuestion\",\"questionId\"],\"properties\":{\"answer\":{\"description\":\"Answer\",\"type\":\"string\"},\"customQuestion\":{\"description\":\"Custom question\",\"type\":\"string\"},\"questionId\":{\"description\":\"Question ID\",\"type\":\"string\"}},\"required\":[],\"title\":\"KBA Info Items\",\"type\":\"object\"},\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"lastSync\":{\"description\":\"Last Sync timestamp\",\"isPersonal\":false,\"order\":[\"effectiveAssignments\",\"timestamp\"],\"properties\":{\"effectiveAssignments\":{\"description\":\"Effective Assignments\",\"items\":{\"title\":\"Effective Assignments Items\",\"type\":\"object\"},\"title\":\"Effective Assignments\",\"type\":\"array\"},\"timestamp\":{\"description\":\"Timestamp\",\"type\":\"string\"}},\"required\":[],\"scope\":\"private\",\"searchable\":false,\"title\":\"Last Sync timestamp\",\"type\":\"object\",\"usageDescription\":\"\",\"viewable\":false},\"mail\":{\"description\":\"Email Address\",\"isPersonal\":true,\"policies\":[{\"policyId\":\"valid-email-address-format\"}],\"searchable\":true,\"title\":\"Email Address\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"manager\":{\"description\":\"Manager\",\"isPersonal\":false,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Manager _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"reports\",\"reverseRelationship\":true,\"searchable\":false,\"title\":\"Manager\",\"type\":\"relationship\",\"usageDescription\":\"\",\"userEditable\":false,\"validate\":true,\"viewable\":true},\"memberOfOrg\":{\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":false,\"path\":\"managed/alpha_organization\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Organizations to which I Belong\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"memberOfOrgIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"org identifiers\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\",\"parentIDs\"],\"referencedRelationshipFields\":[\"memberOfOrg\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"MemberOfOrgIDs\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"ownerOfApp\":{\"items\":{\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Application\",\"path\":\"managed/alpha_application\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[\"name\"]}}],\"reversePropertyName\":\"owners\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Applications I Own\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"ownerOfOrg\":{\"items\":{\"notifySelf\":false,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":true,\"path\":\"managed/alpha_organization\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"owners\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Organizations I Own\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"password\":{\"description\":\"Password\",\"isPersonal\":false,\"isProtected\":true,\"scope\":\"private\",\"searchable\":false,\"title\":\"Password\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"postalAddress\":{\"description\":\"Address 1\",\"isPersonal\":true,\"title\":\"Address 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"postalCode\":{\"description\":\"Postal Code\",\"isPersonal\":false,\"title\":\"Postal Code\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"preferences\":{\"description\":\"Preferences\",\"isPersonal\":false,\"order\":[\"updates\",\"marketing\"],\"properties\":{\"marketing\":{\"description\":\"Send me special offers and services\",\"type\":\"boolean\"},\"updates\":{\"description\":\"Send me news and updates\",\"type\":\"boolean\"}},\"required\":[],\"searchable\":false,\"title\":\"Preferences\",\"type\":\"object\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"profileImage\":{\"description\":\"Profile Image\",\"isPersonal\":true,\"searchable\":true,\"title\":\"Profile Image\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"reports\":{\"description\":\"Direct Reports\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Direct Reports Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"manager\",\"reverseRelationship\":true,\"title\":\"Direct Reports Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Direct Reports\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"roles\":{\"description\":\"Provisioning Roles\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:roles\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Provisioning Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Role\",\"path\":\"managed/alpha_role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Provisioning Roles Items\",\"type\":\"relationship\",\"validate\":true},\"relationshipGrantTemporalConstraintsEnforced\":true,\"returnByDefault\":false,\"title\":\"Provisioning Roles\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"sn\":{\"description\":\"Last Name\",\"isPersonal\":true,\"searchable\":true,\"title\":\"Last Name\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"stateProvince\":{\"description\":\"State/Province\",\"isPersonal\":false,\"title\":\"State/Province\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"telephoneNumber\":{\"description\":\"Telephone Number\",\"isPersonal\":true,\"pattern\":\"^\\\\+?([0-9\\\\- \\\\(\\\\)])*$\",\"title\":\"Telephone Number\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"userName\":{\"description\":\"Username\",\"isPersonal\":true,\"minLength\":1,\"policies\":[{\"policyId\":\"valid-username\"},{\"params\":{\"forbiddenChars\":[\"/\"]},\"policyId\":\"cannot-contain-characters\"},{\"params\":{\"minLength\":1},\"policyId\":\"minimum-length\"},{\"params\":{\"maxLength\":255},\"policyId\":\"maximum-length\"}],\"searchable\":true,\"title\":\"Username\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true}},\"required\":[\"userName\",\"givenName\",\"sn\",\"mail\"],\"title\":\"Alpha realm - User\",\"type\":\"object\",\"viewable\":true}},{\"lastSync\":{\"effectiveAssignmentsProperty\":\"effectiveAssignments\",\"lastSyncProperty\":\"lastSync\"},\"meta\":{\"property\":\"_meta\",\"resourceCollection\":\"managed/bravo_usermeta\",\"trackedProperties\":[\"createDate\",\"lastChanged\"]},\"name\":\"bravo_user\",\"notifications\":{},\"schema\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"icon\":\"fa-user\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User\",\"mat-icon\":\"people\",\"order\":[\"_id\",\"userName\",\"password\",\"givenName\",\"cn\",\"sn\",\"mail\",\"profileImage\",\"description\",\"accountStatus\",\"telephoneNumber\",\"postalAddress\",\"city\",\"postalCode\",\"country\",\"stateProvince\",\"roles\",\"assignments\",\"groups\",\"applications\",\"manager\",\"authzRoles\",\"reports\",\"effectiveRoles\",\"effectiveAssignments\",\"effectiveGroups\",\"effectiveApplications\",\"lastSync\",\"kbaInfo\",\"preferences\",\"consentedMappings\",\"ownerOfOrg\",\"adminOfOrg\",\"memberOfOrg\",\"memberOfOrgIDs\",\"ownerOfApp\",\"frIndexedString1\",\"frIndexedString2\",\"frIndexedString3\",\"frIndexedString4\",\"frIndexedString5\",\"frUnindexedString1\",\"frUnindexedString2\",\"frUnindexedString3\",\"frUnindexedString4\",\"frUnindexedString5\",\"frIndexedMultivalued1\",\"frIndexedMultivalued2\",\"frIndexedMultivalued3\",\"frIndexedMultivalued4\",\"frIndexedMultivalued5\",\"frUnindexedMultivalued1\",\"frUnindexedMultivalued2\",\"frUnindexedMultivalued3\",\"frUnindexedMultivalued4\",\"frUnindexedMultivalued5\",\"frIndexedDate1\",\"frIndexedDate2\",\"frIndexedDate3\",\"frIndexedDate4\",\"frIndexedDate5\",\"frUnindexedDate1\",\"frUnindexedDate2\",\"frUnindexedDate3\",\"frUnindexedDate4\",\"frUnindexedDate5\",\"frIndexedInteger1\",\"frIndexedInteger2\",\"frIndexedInteger3\",\"frIndexedInteger4\",\"frIndexedInteger5\",\"frUnindexedInteger1\",\"frUnindexedInteger2\",\"frUnindexedInteger3\",\"frUnindexedInteger4\",\"frUnindexedInteger5\",\"assignedDashboard\"],\"properties\":{\"_id\":{\"description\":\"User ID\",\"isPersonal\":false,\"policies\":[{\"params\":{\"forbiddenChars\":[\"/\"]},\"policyId\":\"cannot-contain-characters\"}],\"searchable\":false,\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":false},\"accountStatus\":{\"default\":\"active\",\"description\":\"Status\",\"isPersonal\":false,\"searchable\":true,\"title\":\"Status\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"adminOfOrg\":{\"items\":{\"notifySelf\":false,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":true,\"path\":\"managed/bravo_organization\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"admins\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Organizations I Administer\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"aliasList\":{\"description\":\"List of identity aliases used primarily to record social IdP subjects for this user\",\"isVirtual\":false,\"items\":{\"title\":\"User Alias Names Items\",\"type\":\"string\"},\"returnByDefault\":false,\"searchable\":false,\"title\":\"User Alias Names List\",\"type\":\"array\",\"userEditable\":true,\"viewable\":false},\"applications\":{\"description\":\"Applications\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:applications\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:applications:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Groups Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Application\",\"path\":\"managed/bravo_application\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[\"name\"]}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Groups Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Applications\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":false},\"assignedDashboard\":{\"description\":\"List of items to click on for this user\",\"isVirtual\":true,\"items\":{\"title\":\"Assigned Dashboard Items\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"name\"],\"referencedRelationshipFields\":[[\"roles\",\"applications\"],[\"applications\"]]},\"searchable\":false,\"title\":\"Assigned Dashboard\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"assignments\":{\"description\":\"Assignments\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Provisioning Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Assignment\",\"path\":\"managed/bravo_assignment\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Assignments Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Assignments\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"authzRoles\":{\"description\":\"Authorization Roles\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Authorization Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Internal Role\",\"path\":\"internal/role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"authzMembers\",\"reverseRelationship\":true,\"title\":\"Authorization Roles Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Authorization Roles\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"city\":{\"description\":\"City\",\"isPersonal\":false,\"title\":\"City\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"cn\":{\"default\":\"{{givenName}} {{sn}}\",\"description\":\"Common Name\",\"isPersonal\":true,\"scope\":\"private\",\"searchable\":false,\"title\":\"Common Name\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"consentedMappings\":{\"description\":\"Consented Mappings\",\"isPersonal\":false,\"isVirtual\":false,\"items\":{\"items\":{\"order\":[\"mapping\",\"consentDate\"],\"properties\":{\"consentDate\":{\"description\":\"Consent Date\",\"searchable\":true,\"title\":\"Consent Date\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"mapping\":{\"description\":\"Mapping\",\"searchable\":true,\"title\":\"Mapping\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true}},\"required\":[\"mapping\",\"consentDate\"],\"title\":\"Consented Mappings Item\",\"type\":\"object\"},\"title\":\"Consented Mappings Items\",\"type\":\"array\"},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Consented Mappings\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"country\":{\"description\":\"Country\",\"isPersonal\":false,\"title\":\"Country\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"description\":{\"description\":\"Description\",\"isPersonal\":false,\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"effectiveApplications\":{\"description\":\"Effective Applications\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Assigned Application Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedObjectFields\":[\"name\"],\"referencedRelationshipFields\":[[\"roles\",\"applications\"],[\"applications\"]]},\"returnByDefault\":true,\"title\":\"Effective Applications\",\"type\":\"array\",\"viewable\":false},\"effectiveAssignments\":{\"description\":\"Effective Assignments\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Assignments Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedObjectFields\":[\"*\"],\"referencedRelationshipFields\":[[\"roles\",\"assignments\"],[\"assignments\"]]},\"returnByDefault\":true,\"title\":\"Effective Assignments\",\"type\":\"array\",\"usageDescription\":\"\",\"viewable\":false},\"effectiveGroups\":{\"description\":\"Effective Groups\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Groups Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedRelationshipFields\":[\"groups\"]},\"returnByDefault\":true,\"title\":\"Effective Groups\",\"type\":\"array\",\"usageDescription\":\"\",\"viewable\":false},\"effectiveRoles\":{\"description\":\"Effective Roles\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Roles Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedRelationshipFields\":[\"roles\"]},\"returnByDefault\":true,\"title\":\"Effective Roles\",\"type\":\"array\",\"usageDescription\":\"\",\"viewable\":false},\"frIndexedDate1\":{\"description\":\"Generic Indexed Date 1\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate2\":{\"description\":\"Generic Indexed Date 2\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate3\":{\"description\":\"Generic Indexed Date 3\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate4\":{\"description\":\"Generic Indexed Date 4\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate5\":{\"description\":\"Generic Indexed Date 5\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger1\":{\"description\":\"Generic Indexed Integer 1\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 1\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger2\":{\"description\":\"Generic Indexed Integer 2\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 2\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger3\":{\"description\":\"Generic Indexed Integer 3\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 3\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger4\":{\"description\":\"Generic Indexed Integer 4\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 4\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger5\":{\"description\":\"Generic Indexed Integer 5\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 5\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued1\":{\"description\":\"Generic Indexed Multivalue 1\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 1\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued2\":{\"description\":\"Generic Indexed Multivalue 2\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 2\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued3\":{\"description\":\"Generic Indexed Multivalue 3\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 3\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued4\":{\"description\":\"Generic Indexed Multivalue 4\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 4\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued5\":{\"description\":\"Generic Indexed Multivalue 5\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 5\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString1\":{\"description\":\"Generic Indexed String 1\",\"isPersonal\":false,\"title\":\"Generic Indexed String 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString2\":{\"description\":\"Generic Indexed String 2\",\"isPersonal\":false,\"title\":\"Generic Indexed String 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString3\":{\"description\":\"Generic Indexed String 3\",\"isPersonal\":false,\"title\":\"Generic Indexed String 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString4\":{\"description\":\"Generic Indexed String 4\",\"isPersonal\":false,\"title\":\"Generic Indexed String 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString5\":{\"description\":\"Generic Indexed String 5\",\"isPersonal\":false,\"title\":\"Generic Indexed String 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate1\":{\"description\":\"Generic Unindexed Date 1\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate2\":{\"description\":\"Generic Unindexed Date 2\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate3\":{\"description\":\"Generic Unindexed Date 3\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate4\":{\"description\":\"Generic Unindexed Date 4\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate5\":{\"description\":\"Generic Unindexed Date 5\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger1\":{\"description\":\"Generic Unindexed Integer 1\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 1\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger2\":{\"description\":\"Generic Unindexed Integer 2\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 2\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger3\":{\"description\":\"Generic Unindexed Integer 3\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 3\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger4\":{\"description\":\"Generic Unindexed Integer 4\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 4\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger5\":{\"description\":\"Generic Unindexed Integer 5\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 5\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued1\":{\"description\":\"Generic Unindexed Multivalue 1\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 1\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued2\":{\"description\":\"Generic Unindexed Multivalue 2\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 2\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued3\":{\"description\":\"Generic Unindexed Multivalue 3\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 3\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued4\":{\"description\":\"Generic Unindexed Multivalue 4\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 4\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued5\":{\"description\":\"Generic Unindexed Multivalue 5\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 5\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString1\":{\"description\":\"Generic Unindexed String 1\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString2\":{\"description\":\"Generic Unindexed String 2\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString3\":{\"description\":\"Generic Unindexed String 3\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString4\":{\"description\":\"Generic Unindexed String 4\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString5\":{\"description\":\"Generic Unindexed String 5\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"givenName\":{\"description\":\"First Name\",\"isPersonal\":true,\"searchable\":true,\"title\":\"First Name\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"groups\":{\"description\":\"Groups\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:groups\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:groups:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Groups Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Group\",\"path\":\"managed/bravo_group\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Groups Items\",\"type\":\"relationship\",\"validate\":true},\"relationshipGrantTemporalConstraintsEnforced\":false,\"returnByDefault\":false,\"title\":\"Groups\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"kbaInfo\":{\"description\":\"KBA Info\",\"isPersonal\":true,\"items\":{\"order\":[\"answer\",\"customQuestion\",\"questionId\"],\"properties\":{\"answer\":{\"description\":\"Answer\",\"type\":\"string\"},\"customQuestion\":{\"description\":\"Custom question\",\"type\":\"string\"},\"questionId\":{\"description\":\"Question ID\",\"type\":\"string\"}},\"required\":[],\"title\":\"KBA Info Items\",\"type\":\"object\"},\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"lastSync\":{\"description\":\"Last Sync timestamp\",\"isPersonal\":false,\"order\":[\"effectiveAssignments\",\"timestamp\"],\"properties\":{\"effectiveAssignments\":{\"description\":\"Effective Assignments\",\"items\":{\"title\":\"Effective Assignments Items\",\"type\":\"object\"},\"title\":\"Effective Assignments\",\"type\":\"array\"},\"timestamp\":{\"description\":\"Timestamp\",\"type\":\"string\"}},\"required\":[],\"scope\":\"private\",\"searchable\":false,\"title\":\"Last Sync timestamp\",\"type\":\"object\",\"usageDescription\":\"\",\"viewable\":false},\"mail\":{\"description\":\"Email Address\",\"isPersonal\":true,\"policies\":[{\"policyId\":\"valid-email-address-format\"}],\"searchable\":true,\"title\":\"Email Address\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"manager\":{\"description\":\"Manager\",\"isPersonal\":false,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Manager _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"reports\",\"reverseRelationship\":true,\"searchable\":false,\"title\":\"Manager\",\"type\":\"relationship\",\"usageDescription\":\"\",\"userEditable\":false,\"validate\":true,\"viewable\":true},\"memberOfOrg\":{\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":false,\"path\":\"managed/bravo_organization\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Organizations to which I Belong\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"memberOfOrgIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"org identifiers\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\",\"parentIDs\"],\"referencedRelationshipFields\":[\"memberOfOrg\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"MemberOfOrgIDs\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"ownerOfApp\":{\"items\":{\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Application\",\"path\":\"managed/bravo_application\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[\"name\"]}}],\"reversePropertyName\":\"owners\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Applications I Own\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"ownerOfOrg\":{\"items\":{\"notifySelf\":false,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":true,\"path\":\"managed/bravo_organization\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"owners\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Organizations I Own\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"password\":{\"description\":\"Password\",\"isPersonal\":false,\"isProtected\":true,\"scope\":\"private\",\"searchable\":false,\"title\":\"Password\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"postalAddress\":{\"description\":\"Address 1\",\"isPersonal\":true,\"title\":\"Address 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"postalCode\":{\"description\":\"Postal Code\",\"isPersonal\":false,\"title\":\"Postal Code\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"preferences\":{\"description\":\"Preferences\",\"isPersonal\":false,\"order\":[\"updates\",\"marketing\"],\"properties\":{\"marketing\":{\"description\":\"Send me special offers and services\",\"type\":\"boolean\"},\"updates\":{\"description\":\"Send me news and updates\",\"type\":\"boolean\"}},\"required\":[],\"searchable\":false,\"title\":\"Preferences\",\"type\":\"object\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"profileImage\":{\"description\":\"Profile Image\",\"isPersonal\":true,\"searchable\":true,\"title\":\"Profile Image\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"reports\":{\"description\":\"Direct Reports\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Direct Reports Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"manager\",\"reverseRelationship\":true,\"title\":\"Direct Reports Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Direct Reports\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"roles\":{\"description\":\"Provisioning Roles\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:roles\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Provisioning Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Role\",\"path\":\"managed/bravo_role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Provisioning Roles Items\",\"type\":\"relationship\",\"validate\":true},\"relationshipGrantTemporalConstraintsEnforced\":true,\"returnByDefault\":false,\"title\":\"Provisioning Roles\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"sn\":{\"description\":\"Last Name\",\"isPersonal\":true,\"searchable\":true,\"title\":\"Last Name\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"stateProvince\":{\"description\":\"State/Province\",\"isPersonal\":false,\"title\":\"State/Province\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"telephoneNumber\":{\"description\":\"Telephone Number\",\"isPersonal\":true,\"pattern\":\"^\\\\+?([0-9\\\\- \\\\(\\\\)])*$\",\"title\":\"Telephone Number\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"userName\":{\"description\":\"Username\",\"isPersonal\":true,\"minLength\":1,\"policies\":[{\"policyId\":\"valid-username\"},{\"params\":{\"forbiddenChars\":[\"/\"]},\"policyId\":\"cannot-contain-characters\"},{\"params\":{\"minLength\":1},\"policyId\":\"minimum-length\"},{\"params\":{\"maxLength\":255},\"policyId\":\"maximum-length\"}],\"searchable\":true,\"title\":\"Username\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true}},\"required\":[\"userName\",\"givenName\",\"sn\",\"mail\"],\"title\":\"Bravo realm - User\",\"type\":\"object\",\"viewable\":true}},{\"name\":\"alpha_role\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"\",\"icon\":\"fa-check-square-o\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role\",\"mat-icon\":\"assignment_ind\",\"order\":[\"_id\",\"name\",\"description\",\"members\",\"assignments\",\"applications\",\"condition\",\"temporalConstraints\"],\"properties\":{\"_id\":{\"description\":\"Role ID\",\"searchable\":false,\"title\":\"Name\",\"type\":\"string\",\"viewable\":false},\"applications\":{\"description\":\"Role Applications\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role:applications:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Role Application Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Application\",\"path\":\"managed/alpha_application\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"roles\",\"reverseRelationship\":true,\"title\":\"Role Application Items\",\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"members\"],\"relationshipGrantTemporalConstraintsEnforced\":true,\"returnByDefault\":false,\"title\":\"Applications\",\"type\":\"array\",\"viewable\":false},\"assignments\":{\"description\":\"Managed Assignments\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Managed Assignments Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Assignment\",\"path\":\"managed/alpha_assignment\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"roles\",\"reverseRelationship\":true,\"title\":\"Managed Assignments Items\",\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"members\"],\"returnByDefault\":false,\"title\":\"Managed Assignments\",\"type\":\"array\",\"viewable\":true},\"condition\":{\"description\":\"A conditional filter for this role\",\"isConditional\":true,\"searchable\":false,\"title\":\"Condition\",\"type\":\"string\",\"viewable\":false},\"description\":{\"description\":\"The role description, used for display purposes.\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"viewable\":true},\"members\":{\"description\":\"Role Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Role Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"roles\",\"reverseRelationship\":true,\"title\":\"Role Members Items\",\"type\":\"relationship\",\"validate\":true},\"relationshipGrantTemporalConstraintsEnforced\":true,\"returnByDefault\":false,\"title\":\"Role Members\",\"type\":\"array\",\"viewable\":true},\"name\":{\"description\":\"The role name, used for display purposes.\",\"policies\":[{\"policyId\":\"unique\"}],\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"viewable\":true},\"temporalConstraints\":{\"description\":\"An array of temporal constraints for a role\",\"isTemporalConstraint\":true,\"items\":{\"order\":[\"duration\"],\"properties\":{\"duration\":{\"description\":\"Duration\",\"type\":\"string\"}},\"required\":[\"duration\"],\"title\":\"Temporal Constraints Items\",\"type\":\"object\"},\"notifyRelationships\":[\"members\"],\"returnByDefault\":true,\"title\":\"Temporal Constraints\",\"type\":\"array\",\"viewable\":false}},\"required\":[\"name\"],\"title\":\"Alpha realm - Role\",\"type\":\"object\"}},{\"name\":\"bravo_role\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"\",\"icon\":\"fa-check-square-o\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role\",\"mat-icon\":\"assignment_ind\",\"order\":[\"_id\",\"name\",\"description\",\"members\",\"assignments\",\"applications\",\"condition\",\"temporalConstraints\"],\"properties\":{\"_id\":{\"description\":\"Role ID\",\"searchable\":false,\"title\":\"Name\",\"type\":\"string\",\"viewable\":false},\"applications\":{\"description\":\"Role Applications\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role:applications:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Role Application Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Application\",\"path\":\"managed/bravo_application\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"roles\",\"reverseRelationship\":true,\"title\":\"Role Application Items\",\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"members\"],\"relationshipGrantTemporalConstraintsEnforced\":true,\"returnByDefault\":false,\"title\":\"Applications\",\"type\":\"array\",\"viewable\":false},\"assignments\":{\"description\":\"Managed Assignments\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Managed Assignments Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Assignment\",\"path\":\"managed/bravo_assignment\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"roles\",\"reverseRelationship\":true,\"title\":\"Managed Assignments Items\",\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"members\"],\"returnByDefault\":false,\"title\":\"Managed Assignments\",\"type\":\"array\",\"viewable\":true},\"condition\":{\"description\":\"A conditional filter for this role\",\"isConditional\":true,\"searchable\":false,\"title\":\"Condition\",\"type\":\"string\",\"viewable\":false},\"description\":{\"description\":\"The role description, used for display purposes.\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"viewable\":true},\"members\":{\"description\":\"Role Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Role Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"roles\",\"reverseRelationship\":true,\"title\":\"Role Members Items\",\"type\":\"relationship\",\"validate\":true},\"relationshipGrantTemporalConstraintsEnforced\":true,\"returnByDefault\":false,\"title\":\"Role Members\",\"type\":\"array\",\"viewable\":true},\"name\":{\"description\":\"The role name, used for display purposes.\",\"policies\":[{\"policyId\":\"unique\"}],\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"viewable\":true},\"temporalConstraints\":{\"description\":\"An array of temporal constraints for a role\",\"isTemporalConstraint\":true,\"items\":{\"order\":[\"duration\"],\"properties\":{\"duration\":{\"description\":\"Duration\",\"type\":\"string\"}},\"required\":[\"duration\"],\"title\":\"Temporal Constraints Items\",\"type\":\"object\"},\"notifyRelationships\":[\"members\"],\"returnByDefault\":true,\"title\":\"Temporal Constraints\",\"type\":\"array\",\"viewable\":false}},\"required\":[\"name\"],\"title\":\"Bravo realm - Role\",\"type\":\"object\"}},{\"attributeEncryption\":{},\"name\":\"alpha_assignment\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"A role assignment\",\"icon\":\"fa-key\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Assignment\",\"mat-icon\":\"vpn_key\",\"order\":[\"_id\",\"name\",\"description\",\"type\",\"mapping\",\"attributes\",\"linkQualifiers\",\"roles\",\"members\",\"condition\",\"weight\"],\"properties\":{\"_id\":{\"description\":\"The assignment ID\",\"searchable\":false,\"title\":\"Name\",\"type\":\"string\",\"viewable\":false},\"attributes\":{\"description\":\"The attributes operated on by this assignment.\",\"items\":{\"order\":[\"assignmentOperation\",\"unassignmentOperation\",\"name\",\"value\"],\"properties\":{\"assignmentOperation\":{\"description\":\"Assignment operation\",\"type\":\"string\"},\"name\":{\"description\":\"Name\",\"type\":\"string\"},\"unassignmentOperation\":{\"description\":\"Unassignment operation\",\"type\":\"string\"},\"value\":{\"description\":\"Value\",\"type\":\"string\"}},\"required\":[],\"title\":\"Assignment Attributes Items\",\"type\":\"object\"},\"notifyRelationships\":[\"roles\",\"members\"],\"title\":\"Assignment Attributes\",\"type\":\"array\",\"viewable\":true},\"condition\":{\"description\":\"A conditional filter for this assignment\",\"isConditional\":true,\"searchable\":false,\"title\":\"Condition\",\"type\":\"string\",\"viewable\":false},\"description\":{\"description\":\"The assignment description, used for display purposes.\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"viewable\":true},\"linkQualifiers\":{\"description\":\"Conditional link qualifiers to restrict this assignment to.\",\"items\":{\"title\":\"Link Qualifiers Items\",\"type\":\"string\"},\"title\":\"Link Qualifiers\",\"type\":\"array\",\"viewable\":true},\"mapping\":{\"description\":\"The name of the mapping this assignment applies to\",\"policies\":[{\"policyId\":\"mapping-exists\"}],\"searchable\":true,\"title\":\"Mapping\",\"type\":\"string\",\"viewable\":true},\"members\":{\"description\":\"Assignment Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Assignment Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"assignments\",\"reverseRelationship\":true,\"title\":\"Assignment Members Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Assignment Members\",\"type\":\"array\",\"viewable\":true},\"name\":{\"description\":\"The assignment name, used for display purposes.\",\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"viewable\":true},\"roles\":{\"description\":\"Managed Roles\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Managed Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Role\",\"notify\":true,\"path\":\"managed/alpha_role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"assignments\",\"reverseRelationship\":true,\"title\":\"Managed Roles Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Managed Roles\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"type\":{\"description\":\"The type of object this assignment represents\",\"title\":\"Type\",\"type\":\"string\",\"viewable\":true},\"weight\":{\"description\":\"The weight of the assignment.\",\"notifyRelationships\":[\"roles\",\"members\"],\"searchable\":false,\"title\":\"Weight\",\"type\":[\"number\",\"null\"],\"viewable\":true}},\"required\":[\"name\",\"description\",\"mapping\"],\"title\":\"Alpha realm - Assignment\",\"type\":\"object\"}},{\"attributeEncryption\":{},\"name\":\"bravo_assignment\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"A role assignment\",\"icon\":\"fa-key\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Assignment\",\"mat-icon\":\"vpn_key\",\"order\":[\"_id\",\"name\",\"description\",\"type\",\"mapping\",\"attributes\",\"linkQualifiers\",\"roles\",\"members\",\"condition\",\"weight\"],\"properties\":{\"_id\":{\"description\":\"The assignment ID\",\"searchable\":false,\"title\":\"Name\",\"type\":\"string\",\"viewable\":false},\"attributes\":{\"description\":\"The attributes operated on by this assignment.\",\"items\":{\"order\":[\"assignmentOperation\",\"unassignmentOperation\",\"name\",\"value\"],\"properties\":{\"assignmentOperation\":{\"description\":\"Assignment operation\",\"type\":\"string\"},\"name\":{\"description\":\"Name\",\"type\":\"string\"},\"unassignmentOperation\":{\"description\":\"Unassignment operation\",\"type\":\"string\"},\"value\":{\"description\":\"Value\",\"type\":\"string\"}},\"required\":[],\"title\":\"Assignment Attributes Items\",\"type\":\"object\"},\"notifyRelationships\":[\"roles\",\"members\"],\"title\":\"Assignment Attributes\",\"type\":\"array\",\"viewable\":true},\"condition\":{\"description\":\"A conditional filter for this assignment\",\"isConditional\":true,\"searchable\":false,\"title\":\"Condition\",\"type\":\"string\",\"viewable\":false},\"description\":{\"description\":\"The assignment description, used for display purposes.\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"viewable\":true},\"linkQualifiers\":{\"description\":\"Conditional link qualifiers to restrict this assignment to.\",\"items\":{\"title\":\"Link Qualifiers Items\",\"type\":\"string\"},\"title\":\"Link Qualifiers\",\"type\":\"array\",\"viewable\":true},\"mapping\":{\"description\":\"The name of the mapping this assignment applies to\",\"policies\":[{\"policyId\":\"mapping-exists\"}],\"searchable\":true,\"title\":\"Mapping\",\"type\":\"string\",\"viewable\":true},\"members\":{\"description\":\"Assignment Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Assignment Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"assignments\",\"reverseRelationship\":true,\"title\":\"Assignment Members Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Assignment Members\",\"type\":\"array\",\"viewable\":true},\"name\":{\"description\":\"The assignment name, used for display purposes.\",\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"viewable\":true},\"roles\":{\"description\":\"Managed Roles\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Managed Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Role\",\"notify\":true,\"path\":\"managed/bravo_role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"assignments\",\"reverseRelationship\":true,\"title\":\"Managed Roles Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Managed Roles\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"type\":{\"description\":\"The type of object this assignment represents\",\"title\":\"Type\",\"type\":\"string\",\"viewable\":true},\"weight\":{\"description\":\"The weight of the assignment.\",\"notifyRelationships\":[\"roles\",\"members\"],\"searchable\":false,\"title\":\"Weight\",\"type\":[\"number\",\"null\"],\"viewable\":true}},\"required\":[\"name\",\"description\",\"mapping\"],\"title\":\"Bravo realm - Assignment\",\"type\":\"object\"}},{\"name\":\"alpha_organization\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"An organization or tenant, whose resources are managed by organizational admins.\",\"icon\":\"fa-building\",\"mat-icon\":\"domain\",\"order\":[\"name\",\"description\",\"owners\",\"admins\",\"members\",\"parent\",\"children\",\"adminIDs\",\"ownerIDs\",\"parentAdminIDs\",\"parentOwnerIDs\",\"parentIDs\"],\"properties\":{\"adminIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"admin ids\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\"],\"referencedRelationshipFields\":[\"admins\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"Admin user ids\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"admins\":{\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":false,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"adminOfOrg\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"children\"],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Administrators\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"children\":{\"description\":\"Child Organizations\",\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":true,\"path\":\"managed/alpha_organization\",\"query\":{\"fields\":[\"name\",\"description\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"parent\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Child Organizations\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"description\":{\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"members\":{\"items\":{\"notifySelf\":false,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":true,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"memberOfOrg\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Members\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"name\":{\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"ownerIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"owner ids\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\"],\"referencedRelationshipFields\":[\"owners\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"Owner user ids\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"owners\":{\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":false,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"ownerOfOrg\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"children\"],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Owner\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"parent\":{\"description\":\"Parent Organization\",\"notifyRelationships\":[\"children\",\"members\"],\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":false,\"path\":\"managed/alpha_organization\",\"query\":{\"fields\":[\"name\",\"description\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"returnByDefault\":false,\"reversePropertyName\":\"children\",\"reverseRelationship\":true,\"searchable\":false,\"title\":\"Parent Organization\",\"type\":\"relationship\",\"userEditable\":false,\"validate\":true,\"viewable\":true},\"parentAdminIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"user ids of parent admins\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"adminIDs\",\"parentAdminIDs\"],\"referencedRelationshipFields\":[\"parent\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"user ids of parent admins\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"parentIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"parent org ids\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\",\"parentIDs\"],\"referencedRelationshipFields\":[\"parent\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"parent org ids\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"parentOwnerIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"user ids of parent owners\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"ownerIDs\",\"parentOwnerIDs\"],\"referencedRelationshipFields\":[\"parent\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"user ids of parent owners\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false}},\"required\":[\"name\"],\"title\":\"Alpha realm - Organization\",\"type\":\"object\"}},{\"name\":\"bravo_organization\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"An organization or tenant, whose resources are managed by organizational admins.\",\"icon\":\"fa-building\",\"mat-icon\":\"domain\",\"order\":[\"name\",\"description\",\"owners\",\"admins\",\"members\",\"parent\",\"children\",\"adminIDs\",\"ownerIDs\",\"parentAdminIDs\",\"parentOwnerIDs\",\"parentIDs\"],\"properties\":{\"adminIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"admin ids\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\"],\"referencedRelationshipFields\":[\"admins\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"Admin user ids\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"admins\":{\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":false,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"adminOfOrg\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"children\"],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Administrators\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"children\":{\"description\":\"Child Organizations\",\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":true,\"path\":\"managed/bravo_organization\",\"query\":{\"fields\":[\"name\",\"description\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"parent\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Child Organizations\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"description\":{\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"members\":{\"items\":{\"notifySelf\":false,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":true,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"memberOfOrg\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Members\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"name\":{\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"ownerIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"owner ids\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\"],\"referencedRelationshipFields\":[\"owners\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"Owner user ids\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"owners\":{\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":false,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"ownerOfOrg\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"children\"],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Owner\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"parent\":{\"description\":\"Parent Organization\",\"notifyRelationships\":[\"children\",\"members\"],\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":false,\"path\":\"managed/bravo_organization\",\"query\":{\"fields\":[\"name\",\"description\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"returnByDefault\":false,\"reversePropertyName\":\"children\",\"reverseRelationship\":true,\"searchable\":false,\"title\":\"Parent Organization\",\"type\":\"relationship\",\"userEditable\":false,\"validate\":true,\"viewable\":true},\"parentAdminIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"user ids of parent admins\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"adminIDs\",\"parentAdminIDs\"],\"referencedRelationshipFields\":[\"parent\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"user ids of parent admins\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"parentIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"parent org ids\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\",\"parentIDs\"],\"referencedRelationshipFields\":[\"parent\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"parent org ids\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"parentOwnerIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"user ids of parent owners\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"ownerIDs\",\"parentOwnerIDs\"],\"referencedRelationshipFields\":[\"parent\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"user ids of parent owners\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false}},\"required\":[\"name\"],\"title\":\"Bravo realm - Organization\",\"type\":\"object\"}},{\"name\":\"alpha_group\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"icon\":\"fa-group\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Group\",\"mat-icon\":\"group\",\"order\":[\"_id\",\"name\",\"description\",\"condition\",\"members\"],\"properties\":{\"_id\":{\"description\":\"Group ID\",\"isPersonal\":false,\"policies\":[{\"params\":{\"propertyName\":\"name\"},\"policyId\":\"id-must-equal-property\"}],\"searchable\":false,\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":false},\"condition\":{\"description\":\"A filter for conditionally assigned members\",\"isConditional\":true,\"policies\":[{\"policyId\":\"valid-query-filter\"}],\"searchable\":false,\"title\":\"Condition\",\"type\":\"string\",\"viewable\":false},\"description\":{\"description\":\"Group Description\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"userEditable\":false,\"viewable\":true},\"members\":{\"description\":\"Group Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Group:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Group Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"groups\",\"reverseRelationship\":true,\"title\":\"Group Members Items\",\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Members\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"name\":{\"description\":\"Group Name\",\"policies\":[{\"policyId\":\"required\"},{\"params\":{\"forbiddenChars\":[\"/*\"]},\"policyId\":\"cannot-contain-characters\"}],\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"viewable\":true}},\"required\":[\"name\"],\"title\":\"Alpha realm - Group\",\"viewable\":true}},{\"name\":\"bravo_group\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"icon\":\"fa-group\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Group\",\"mat-icon\":\"group\",\"order\":[\"_id\",\"name\",\"description\",\"condition\",\"members\"],\"properties\":{\"_id\":{\"description\":\"Group ID\",\"isPersonal\":false,\"policies\":[{\"params\":{\"propertyName\":\"name\"},\"policyId\":\"id-must-equal-property\"}],\"searchable\":false,\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":false},\"condition\":{\"description\":\"A filter for conditionally assigned members\",\"isConditional\":true,\"policies\":[{\"policyId\":\"valid-query-filter\"}],\"searchable\":false,\"title\":\"Condition\",\"type\":\"string\",\"viewable\":false},\"description\":{\"description\":\"Group Description\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"userEditable\":false,\"viewable\":true},\"members\":{\"description\":\"Group Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Group:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Group Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"groups\",\"reverseRelationship\":true,\"title\":\"Group Members Items\",\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Members\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"name\":{\"description\":\"Group Name\",\"policies\":[{\"policyId\":\"required\"},{\"params\":{\"forbiddenChars\":[\"/*\"]},\"policyId\":\"cannot-contain-characters\"}],\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"viewable\":true}},\"required\":[\"name\"],\"title\":\"Bravo realm - Group\",\"viewable\":true}},{\"name\":\"alpha_application\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"Application Object\",\"icon\":\"fa-folder\",\"order\":[\"name\",\"description\",\"url\",\"icon\",\"mappingNames\",\"owners\",\"roles\",\"members\"],\"properties\":{\"_id\":{\"description\":\"Application ID\",\"isPersonal\":false,\"searchable\":false,\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"authoritative\":{\"description\":\"Is this an authoritative application\",\"searchable\":false,\"title\":\"Authoritative\",\"type\":\"boolean\",\"viewable\":false},\"connectorId\":{\"description\":\"Id of the connector associated with the application\",\"searchable\":false,\"title\":\"Connector ID\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"description\":{\"description\":\"Application Description\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"viewable\":true},\"icon\":{\"searchable\":true,\"title\":\"Icon\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"mappingNames\":{\"description\":\"Names of the sync mappings used by an application with provisioning configured.\",\"items\":{\"title\":\"Mapping Name Items\",\"type\":\"string\"},\"searchable\":true,\"title\":\"Sync Mapping Names\",\"type\":\"array\",\"viewable\":true},\"members\":{\"description\":\"Application Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Application:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Group Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":true,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"applications\",\"reverseRelationship\":true,\"title\":\"Group Members Items\",\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Members\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"name\":{\"description\":\"Application name\",\"notifyRelationships\":[\"roles\",\"members\"],\"policies\":[{\"policyId\":\"unique\"}],\"returnByDefault\":true,\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"owners\":{\"description\":\"Application Owners\",\"items\":{\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Application _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"ownerOfApp\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Owners\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"roles\":{\"description\":\"Roles granting users the application\",\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Role\",\"notify\":true,\"path\":\"managed/alpha_role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"applications\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Roles\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"ssoEntities\":{\"description\":\"SSO Entity Id\",\"properties\":{\"idpLocation\":{\"type\":\"string\"},\"idpPrivateId\":{\"type\":\"string\"},\"spLocation\":{\"type\":\"string\"},\"spPrivate\":{\"type\":\"string\"}},\"searchable\":false,\"title\":\"SSO Entity Id\",\"type\":\"object\",\"userEditable\":false,\"viewable\":false},\"templateName\":{\"description\":\"Name of the template the application was created from\",\"searchable\":false,\"title\":\"Template Name\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"templateVersion\":{\"description\":\"The template version\",\"searchable\":false,\"title\":\"Template Version\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"uiConfig\":{\"description\":\"UI Config\",\"isPersonal\":false,\"properties\":{},\"searchable\":false,\"title\":\"UI Config\",\"type\":\"object\",\"usageDescription\":\"\",\"viewable\":false},\"url\":{\"searchable\":true,\"title\":\"Url\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true}},\"required\":[\"name\"],\"title\":\"Alpha realm - Application\",\"type\":\"object\"}},{\"name\":\"bravo_application\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"Application Object\",\"icon\":\"fa-folder\",\"order\":[\"name\",\"description\",\"url\",\"icon\",\"mappingNames\",\"owners\",\"roles\",\"members\"],\"properties\":{\"_id\":{\"description\":\"Application ID\",\"isPersonal\":false,\"searchable\":false,\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"authoritative\":{\"description\":\"Is this an authoritative application\",\"searchable\":false,\"title\":\"Authoritative\",\"type\":\"boolean\",\"viewable\":false},\"connectorId\":{\"description\":\"Id of the connector associated with the application\",\"searchable\":false,\"title\":\"Connector ID\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"description\":{\"description\":\"Application Description\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"viewable\":true},\"icon\":{\"searchable\":true,\"title\":\"Icon\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"mappingNames\":{\"description\":\"Names of the sync mappings used by an application with provisioning configured.\",\"items\":{\"title\":\"Mapping Name Items\",\"type\":\"string\"},\"searchable\":true,\"title\":\"Sync Mapping Names\",\"type\":\"array\",\"viewable\":true},\"members\":{\"description\":\"Application Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Application:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Group Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":true,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"applications\",\"reverseRelationship\":true,\"title\":\"Group Members Items\",\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Members\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"name\":{\"description\":\"Application name\",\"notifyRelationships\":[\"roles\",\"members\"],\"policies\":[{\"policyId\":\"unique\"}],\"returnByDefault\":true,\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"owners\":{\"description\":\"Application Owners\",\"items\":{\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Application _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"ownerOfApp\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Owners\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"roles\":{\"description\":\"Roles granting users the application\",\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Role\",\"notify\":true,\"path\":\"managed/bravo_role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"applications\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Roles\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"ssoEntities\":{\"description\":\"SSO Entity Id\",\"properties\":{\"idpLocation\":{\"type\":\"string\"},\"idpPrivateId\":{\"type\":\"string\"},\"spLocation\":{\"type\":\"string\"},\"spPrivate\":{\"type\":\"string\"}},\"searchable\":false,\"title\":\"SSO Entity Id\",\"type\":\"object\",\"userEditable\":false,\"viewable\":false},\"templateName\":{\"description\":\"Name of the template the application was created from\",\"searchable\":false,\"title\":\"Template Name\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"templateVersion\":{\"description\":\"The template version\",\"searchable\":false,\"title\":\"Template Version\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"uiConfig\":{\"description\":\"UI Config\",\"isPersonal\":false,\"properties\":{},\"searchable\":false,\"title\":\"UI Config\",\"type\":\"object\",\"usageDescription\":\"\",\"viewable\":false},\"url\":{\"searchable\":true,\"title\":\"Url\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true}},\"required\":[\"name\"],\"title\":\"Bravo realm - Application\",\"type\":\"object\"}}]},{\"_id\":\"mapping/managedAlpha_assignment_managedBravo_assignment\",\"consentRequired\":false,\"displayName\":\"managedAlpha_assignment_managedBravo_assignment\",\"icon\":null,\"name\":\"managedAlpha_assignment_managedBravo_assignment\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/alpha_assignment\",\"target\":\"managed/bravo_assignment\"},{\"_id\":\"mapping/managedAlpha_user_systemAzureUser\",\"consentRequired\":false,\"defaultSourceFields\":[\"*\",\"assignments\"],\"defaultTargetFields\":[\"*\",\"memberOf\",\"__roles__\",\"__servicePlanIds__\"],\"displayName\":\"managedAlpha_user_systemAzureUser\",\"icon\":null,\"name\":\"managedAlpha_user_systemAzureUser\",\"optimizeAssignmentSync\":true,\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"DELETE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_TARGET_CONFLICT\"},{\"action\":\"INCORPORATE_CHANGES\",\"situation\":\"TARGET_CHANGED\"}],\"properties\":[{\"source\":\"mail\",\"target\":\"mail\"},{\"source\":\"givenName\",\"target\":\"givenName\"},{\"source\":\"sn\",\"target\":\"surname\"},{\"source\":\"\",\"target\":\"displayName\",\"transform\":{\"source\":\"source.givenName+\\\" \\\"+source.sn\",\"type\":\"text/javascript\"}},{\"source\":\"\",\"target\":\"mailNickname\",\"transform\":{\"source\":\"source.givenName[0].toLowerCase()+source.sn.toLowerCase()\",\"type\":\"text/javascript\"}},{\"source\":\"\",\"target\":\"accountEnabled\",\"transform\":{\"source\":\"true\",\"type\":\"text/javascript\"}},{\"condition\":{\"globals\":{},\"source\":\"(typeof oldTarget === 'undefined' || oldTarget === null)\",\"type\":\"text/javascript\"},\"source\":\"\",\"target\":\"__PASSWORD__\",\"transform\":{\"source\":\"\\\"!@#$%\\\"[Math.floor(Math.random()*5)] + Math.random().toString(36).slice(2, 13).toUpperCase()+Math.random().toString(36).slice(2,13)\",\"type\":\"text/javascript\"}}],\"queuedSync\":{\"enabled\":true,\"maxRetries\":0,\"pollingInterval\":10000},\"runTargetPhase\":false,\"source\":\"managed/alpha_user\",\"sourceCondition\":\"/source/effectiveApplications[_id eq \\\"0f357b7e-6c54-4351-a094-43916877d7e5\\\"] or /source/effectiveAssignments[(mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and type eq \\\"__ENTITLEMENT__\\\")]\",\"sourceQuery\":{\"_queryFilter\":\"effectiveApplications[_id eq \\\"0f357b7e-6c54-4351-a094-43916877d7e5\\\"] or lastSync/managedAlpha_user_systemAzureUser pr or /source/effectiveAssignments[(mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and type eq \\\"__ENTITLEMENT__\\\")]\"},\"target\":\"system/Azure/User\"},{\"_id\":\"mapping/managedBravo_group_managedBravo_group\",\"consentRequired\":false,\"displayName\":\"managedBravo_group_managedBravo_group\",\"icon\":null,\"name\":\"managedBravo_group_managedBravo_group\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/bravo_group\",\"target\":\"managed/bravo_group\"},{\"_id\":\"mapping/managedBravo_user_managedBravo_user0\",\"consentRequired\":false,\"displayName\":\"managedBravo_user_managedBravo_user0\",\"icon\":null,\"name\":\"managedBravo_user_managedBravo_user0\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/bravo_user\",\"target\":\"managed/bravo_user\"},{\"_id\":\"mapping/mapping12\",\"consentRequired\":false,\"displayName\":\"mapping12\",\"linkQualifiers\":[],\"name\":\"mapping12\",\"policies\":[],\"properties\":[],\"source\":\"managed/bravo_user\",\"syncAfter\":[],\"target\":\"managed/bravo_user\"},{\"_id\":\"mapping/systemAzure__group___managedAlpha_assignment\",\"consentRequired\":false,\"displayName\":\"systemAzure__group___managedAlpha_assignment\",\"icon\":null,\"name\":\"systemAzure__group___managedAlpha_assignment\",\"policies\":[{\"action\":\"EXCEPTION\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"DELETE\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"CREATE\",\"situation\":\"MISSING\"},{\"action\":\"EXCEPTION\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"DELETE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"EXCEPTION\",\"situation\":\"UNASSIGNED\"},{\"action\":\"EXCEPTION\",\"situation\":\"LINK_ONLY\"},{\"action\":\"IGNORE\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"LINK\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"}],\"properties\":[{\"default\":\"__RESOURCE__\",\"target\":\"type\"},{\"source\":\"\",\"target\":\"description\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.description !== \\\"undefined\\\" && source.description !== null) ? source.description : source._id\",\"type\":\"text/javascript\"}},{\"default\":\"managedAlpha_user_systemAzureUser\",\"target\":\"mapping\"},{\"source\":\"\",\"target\":\"name\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.displayName !== \\\"undefined\\\" && source.displayName !== null) ? source.displayName : source._id\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"attributes\",\"transform\":{\"globals\":{},\"source\":\"[\\n {\\n 'name': 'memberOf',\\n 'value': [source]\\n }\\n]\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"_id\",\"transform\":{\"globals\":{\"sourceObjectSet\":\"system_Azure___GROUP___\"},\"source\":\"sourceObjectSet.concat(source)\",\"type\":\"text/javascript\"}}],\"source\":\"system/Azure/__GROUP__\",\"target\":\"managed/alpha_assignment\",\"targetQuery\":{\"_queryFilter\":\"mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and attributes[name eq \\\"memberOf\\\"]\"}},{\"_id\":\"mapping/systemAzureDirectoryrole_managedAlpha_assignment\",\"consentRequired\":false,\"displayName\":\"systemAzureDirectoryrole_managedAlpha_assignment\",\"icon\":null,\"name\":\"systemAzureDirectoryrole_managedAlpha_assignment\",\"policies\":[{\"action\":\"EXCEPTION\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"DELETE\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"CREATE\",\"situation\":\"MISSING\"},{\"action\":\"EXCEPTION\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"DELETE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"EXCEPTION\",\"situation\":\"UNASSIGNED\"},{\"action\":\"EXCEPTION\",\"situation\":\"LINK_ONLY\"},{\"action\":\"IGNORE\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"LINK\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"}],\"properties\":[{\"default\":\"__RESOURCE__\",\"target\":\"type\"},{\"source\":\"\",\"target\":\"description\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.description !== \\\"undefined\\\" && source.description !== null) ? source.description : source._id\",\"type\":\"text/javascript\"}},{\"default\":\"managedAlpha_user_systemAzureUser\",\"target\":\"mapping\"},{\"source\":\"\",\"target\":\"name\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.displayName !== \\\"undefined\\\" && source.displayName !== null) ? source.displayName : source._id\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"attributes\",\"transform\":{\"globals\":{},\"source\":\"[\\n {\\n 'name': '__roles__',\\n 'value': [source]\\n }\\n]\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"_id\",\"transform\":{\"globals\":{\"sourceObjectSet\":\"system_Azure_directoryRole_\"},\"source\":\"sourceObjectSet.concat(source)\",\"type\":\"text/javascript\"}}],\"source\":\"system/Azure/directoryRole\",\"target\":\"managed/alpha_assignment\",\"targetQuery\":{\"_queryFilter\":\"mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and attributes[name eq \\\"__roles__\\\"]\"}},{\"_id\":\"mapping/systemAzureServiceplan_managedAlpha_assignment\",\"consentRequired\":false,\"displayName\":\"systemAzureServiceplan_managedAlpha_assignment\",\"icon\":null,\"name\":\"systemAzureServiceplan_managedAlpha_assignment\",\"policies\":[{\"action\":\"EXCEPTION\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"DELETE\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"CREATE\",\"situation\":\"MISSING\"},{\"action\":\"EXCEPTION\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"DELETE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"EXCEPTION\",\"situation\":\"UNASSIGNED\"},{\"action\":\"EXCEPTION\",\"situation\":\"LINK_ONLY\"},{\"action\":\"IGNORE\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"LINK\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"}],\"properties\":[{\"default\":\"__RESOURCE__\",\"target\":\"type\"},{\"source\":\"\",\"target\":\"description\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.servicePlanName !== \\\"undefined\\\" && source.servicePlanName !== null) ? source.servicePlanName : source._id\",\"type\":\"text/javascript\"}},{\"default\":\"managedAlpha_user_systemAzureUser\",\"target\":\"mapping\"},{\"source\":\"\",\"target\":\"name\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.servicePlanName !== \\\"undefined\\\" && source.servicePlanName !== null) ? source.servicePlanName : source._id\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"attributes\",\"transform\":{\"globals\":{},\"source\":\"[\\n {\\n 'name': '__servicePlanIds__',\\n 'value': [source]\\n }\\n]\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"_id\",\"transform\":{\"globals\":{\"sourceObjectSet\":\"system_Azure_servicePlan_\"},\"source\":\"sourceObjectSet.concat(source)\",\"type\":\"text/javascript\"}}],\"source\":\"system/Azure/servicePlan\",\"target\":\"managed/alpha_assignment\",\"targetQuery\":{\"_queryFilter\":\"mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and attributes[name eq \\\"__servicePlanIds__\\\"]\"}},{\"_id\":\"mapping/systemAzureUser_managedAlpha_user\",\"consentRequired\":false,\"correlationQuery\":[{\"linkQualifier\":\"default\",\"source\":\"var qry = {'_queryFilter': 'mail eq \\\"' + source.mail + '\\\"'}; qry\",\"type\":\"text/javascript\"}],\"defaultSourceFields\":[\"*\",\"memberOf\",\"__roles__\",\"__servicePlanIds__\"],\"defaultTargetFields\":[\"*\",\"assignments\"],\"displayName\":\"systemAzureUser_managedAlpha_user\",\"icon\":null,\"links\":\"managedAlpha_user_systemAzureUser\",\"name\":\"systemAzureUser_managedAlpha_user\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"ONBOARD\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_TARGET_CONFLICT\"}],\"properties\":[{\"referencedObjectType\":\"__GROUP__\",\"source\":\"memberOf\",\"target\":\"assignments\"},{\"referencedObjectType\":\"directoryRole\",\"source\":\"__roles__\",\"target\":\"assignments\"},{\"referencedObjectType\":\"servicePlan\",\"source\":\"__servicePlanIds__\",\"target\":\"assignments\"}],\"reconSourceQueryPageSize\":999,\"reconSourceQueryPaging\":true,\"runTargetPhase\":false,\"source\":\"system/Azure/User\",\"sourceQueryFullEntry\":true,\"target\":\"managed/alpha_user\"},{\"_id\":\"policy\",\"additionalFiles\":[],\"resources\":[]},{\"_id\":\"privilegeAssignments\",\"privilegeAssignments\":[{\"name\":\"ownerPrivileges\",\"privileges\":[\"owner-view-update-delete-orgs\",\"owner-create-orgs\",\"owner-view-update-delete-admins-and-members\",\"owner-create-admins\",\"admin-view-update-delete-members\",\"admin-create-members\"],\"relationshipField\":\"ownerOfOrg\"},{\"name\":\"adminPrivileges\",\"privileges\":[\"admin-view-update-delete-orgs\",\"admin-create-orgs\",\"admin-view-update-delete-members\",\"admin-create-members\"],\"relationshipField\":\"adminOfOrg\"}]},{\"_id\":\"privileges\",\"privileges\":[]},{\"_id\":\"provisioner.openic/GoogleApps\",\"configurationProperties\":{\"availableLicenses\":[\"101005/1010050001\",\"101001/1010010001\",\"101031/1010310010\",\"101034/1010340002\",\"101038/1010380002\",\"101034/1010340001\",\"101038/1010380003\",\"101034/1010340004\",\"101034/1010340003\",\"101034/1010340006\",\"Google-Apps/Google-Apps-For-Business\",\"101034/1010340005\",\"Google-Vault/Google-Vault\",\"Google-Apps/1010020031\",\"Google-Apps/1010020030\",\"Google-Apps/1010060003\",\"Google-Apps/1010060005\",\"Google-Apps/Google-Apps-Unlimited\",\"Google-Apps/1010020029\",\"Google-Apps/Google-Apps-Lite\",\"101031/1010310003\",\"101033/1010330002\",\"101033/1010330004\",\"Google-Apps/Google-Apps-For-Education\",\"101031/1010310002\",\"101033/1010330003\",\"Google-Apps/1010020026\",\"101031/1010310007\",\"Google-Apps/1010020025\",\"101031/1010310008\",\"Google-Apps/1010020028\",\"Google-Apps/Google-Apps-For-Postini\",\"101031/1010310005\",\"Google-Apps/1010020027\",\"101031/1010310006\",\"101031/1010310009\",\"Google-Vault/Google-Vault-Former-Employee\",\"101038/1010370001\",\"Google-Apps/1010020020\",\"Google-Apps/1010060001\"],\"clientId\":\"&{esv.gac.client.id}\",\"clientSecret\":\"&{esv.gac.secret}\",\"domain\":\"&{esv.gac.domain}\",\"groupsMaxResults\":\"200\",\"listProductAndSkuMaxResults\":\"100\",\"listProductMaxResults\":\"100\",\"membersMaxResults\":\"200\",\"proxyHost\":null,\"proxyPort\":8080,\"refreshToken\":\"&{esv.gac.refresh}\",\"roleAssignmentMaxResults\":100,\"roleMaxResults\":100,\"usersMaxResults\":\"100\",\"validateCertificate\":true},\"connectorRef\":{\"bundleName\":\"org.forgerock.openicf.connectors.googleapps-connector\",\"bundleVersion\":\"[1.5.0.0,1.6.0.0)\",\"connectorHostRef\":\"\",\"connectorName\":\"org.forgerock.openicf.connectors.googleapps.GoogleAppsConnector\",\"displayName\":\"GoogleApps Connector\",\"systemType\":\"provisioner.openicf\"},\"enabled\":{\"$bool\":\"&{esv.gac.enable.connector}\"},\"objectTypes\":{\"__ACCOUNT__\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"__ACCOUNT__\",\"nativeType\":\"__ACCOUNT__\",\"properties\":{\"__GROUPS__\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"__GROUPS__\",\"nativeType\":\"string\",\"type\":\"array\"},\"__NAME__\":{\"nativeName\":\"__NAME__\",\"nativeType\":\"string\",\"type\":\"string\"},\"__PASSWORD__\":{\"flags\":[\"NOT_READABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"__PASSWORD__\",\"nativeType\":\"JAVA_TYPE_GUARDEDSTRING\",\"required\":true,\"type\":\"string\"},\"__PHOTO__\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"__PHOTO__\",\"nativeType\":\"JAVA_TYPE_BYTE_ARRAY\",\"type\":\"string\"},\"__SECONDARY_EMAILS__\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"__SECONDARY_EMAILS__\",\"nativeType\":\"object\",\"type\":\"array\"},\"__UID__\":{\"nativeName\":\"__UID__\",\"nativeType\":\"string\",\"required\":false,\"type\":\"string\"},\"addresses\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"addresses\",\"nativeType\":\"object\",\"type\":\"array\"},\"agreedToTerms\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"agreedToTerms\",\"nativeType\":\"JAVA_TYPE_PRIMITIVE_BOOLEAN\",\"type\":\"boolean\"},\"aliases\":{\"flags\":[\"NOT_CREATABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"aliases\",\"nativeType\":\"string\",\"type\":\"array\"},\"archived\":{\"nativeName\":\"archived\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"changePasswordAtNextLogin\":{\"nativeName\":\"changePasswordAtNextLogin\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"creationTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"creationTime\",\"nativeType\":\"string\",\"type\":\"array\"},\"customSchemas\":{\"nativeName\":\"customSchemas\",\"nativeType\":\"object\",\"type\":\"object\"},\"customerId\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"customerId\",\"nativeType\":\"string\",\"type\":\"string\"},\"deletionTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"deletionTime\",\"nativeType\":\"string\",\"type\":\"string\"},\"externalIds\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"externalIds\",\"nativeType\":\"object\",\"type\":\"array\"},\"familyName\":{\"nativeName\":\"familyName\",\"nativeType\":\"string\",\"type\":\"string\"},\"fullName\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"fullName\",\"nativeType\":\"string\",\"type\":\"string\"},\"givenName\":{\"nativeName\":\"givenName\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"hashFunction\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"hashFunction\",\"nativeType\":\"string\",\"type\":\"string\"},\"ims\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"ims\",\"nativeType\":\"object\",\"type\":\"array\"},\"includeInGlobalAddressList\":{\"nativeName\":\"includeInGlobalAddressList\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"ipWhitelisted\":{\"nativeName\":\"ipWhitelisted\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"isAdmin\":{\"nativeName\":\"isAdmin\",\"nativeType\":\"JAVA_TYPE_PRIMITIVE_BOOLEAN\",\"type\":\"boolean\"},\"isDelegatedAdmin\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isDelegatedAdmin\",\"nativeType\":\"JAVA_TYPE_PRIMITIVE_BOOLEAN\",\"type\":\"boolean\"},\"isEnforcedIn2Sv\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isEnforcedIn2Sv\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"isEnrolledIn2Sv\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isEnrolledIn2Sv\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"isMailboxSetup\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isMailboxSetup\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"languages\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"languages\",\"nativeType\":\"object\",\"type\":\"array\"},\"lastLoginTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"lastLoginTime\",\"nativeType\":\"string\",\"type\":\"array\"},\"nonEditableAliases\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"nonEditableAliases\",\"nativeType\":\"string\",\"type\":\"array\"},\"orgUnitPath\":{\"nativeName\":\"orgUnitPath\",\"nativeType\":\"string\",\"type\":\"string\"},\"organizations\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"organizations\",\"nativeType\":\"object\",\"type\":\"array\"},\"phones\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"phones\",\"nativeType\":\"object\",\"type\":\"array\"},\"primaryEmail\":{\"nativeName\":\"primaryEmail\",\"nativeType\":\"string\",\"type\":\"string\"},\"recoveryEmail\":{\"nativeName\":\"recoveryEmail\",\"nativeType\":\"string\",\"type\":\"string\"},\"recoveryPhone\":{\"nativeName\":\"recoveryPhone\",\"nativeType\":\"string\",\"type\":\"string\"},\"relations\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"relations\",\"nativeType\":\"object\",\"type\":\"array\"},\"suspended\":{\"nativeName\":\"suspended\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"suspensionReason\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"suspensionReason\",\"nativeType\":\"string\",\"type\":\"string\"},\"thumbnailPhotoUrl\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"thumbnailPhotoUrl\",\"nativeType\":\"string\",\"type\":\"string\"}},\"type\":\"object\"}},\"operationTimeout\":{\"AUTHENTICATE\":-1,\"CREATE\":-1,\"DELETE\":-1,\"GET\":-1,\"RESOLVEUSERNAME\":-1,\"SCHEMA\":-1,\"SCRIPT_ON_CONNECTOR\":-1,\"SCRIPT_ON_RESOURCE\":-1,\"SEARCH\":-1,\"SYNC\":-1,\"TEST\":-1,\"UPDATE\":-1,\"VALIDATE\":-1},\"poolConfigOption\":{\"maxIdle\":10,\"maxObjects\":10,\"maxWait\":150000,\"minEvictableIdleTimeMillis\":120000,\"minIdle\":1},\"resultsHandlerConfig\":{\"enableAttributesToGetSearchResultsHandler\":true,\"enableCaseInsensitiveFilter\":false,\"enableFilteredResultsHandler\":false,\"enableNormalizingResultsHandler\":false}},{\"_id\":\"provisioner.openicf.connectorinfoprovider\",\"connectorsLocation\":\"connectors\",\"remoteConnectorClients\":[{\"enabled\":true,\"name\":\"rcs1\",\"useSSL\":true}],\"remoteConnectorClientsGroups\":[],\"remoteConnectorServers\":[],\"remoteConnectorServersGroups\":[]},{\"_id\":\"provisioner.openicf/Azure\",\"configurationProperties\":{\"clientId\":\"4b07adcc-329c-434c-aa83-49a14bef3c49\",\"clientSecret\":{\"$crypto\":{\"type\":\"x-simple-encryption\",\"value\":{\"cipher\":\"AES/CBC/PKCS5Padding\",\"data\":\"W63amdvzlmynT40WOTl1wPWDc8FUlGWQZK158lmlFTrnhy9PbWZV5YE4v3VeMUDC\",\"iv\":\"KG/YFc8v26QHJzRI3uFhzw==\",\"keySize\":16,\"mac\":\"mA4BzCNS7tuLhosQ+es1Tg==\",\"purpose\":\"idm.config.encryption\",\"salt\":\"vvPwKk0KqOqMjElQgICqEA==\",\"stableId\":\"openidm-sym-default\"}}},\"httpProxyHost\":null,\"httpProxyPassword\":null,\"httpProxyPort\":null,\"httpProxyUsername\":null,\"licenseCacheExpiryTime\":60,\"performHardDelete\":true,\"readRateLimit\":null,\"tenant\":\"711ffa9c-5972-4713-ace3-688c9732614a\",\"writeRateLimit\":null},\"connectorRef\":{\"bundleName\":\"org.forgerock.openicf.connectors.msgraphapi-connector\",\"bundleVersion\":\"1.5.20.21\",\"connectorName\":\"org.forgerock.openicf.connectors.msgraphapi.MSGraphAPIConnector\",\"displayName\":\"MSGraphAPI Connector\",\"systemType\":\"provisioner.openicf\"},\"enabled\":true,\"objectTypes\":{\"User\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"__ACCOUNT__\",\"nativeType\":\"__ACCOUNT__\",\"properties\":{\"__PASSWORD__\":{\"autocomplete\":\"new-password\",\"flags\":[\"NOT_UPDATEABLE\",\"NOT_READABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"__PASSWORD__\",\"nativeType\":\"JAVA_TYPE_GUARDEDSTRING\",\"required\":true,\"type\":\"string\"},\"__roles__\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"__roles__\",\"nativeType\":\"string\",\"type\":\"array\"},\"__servicePlanIds__\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"__servicePlanIds__\",\"nativeType\":\"string\",\"type\":\"array\"},\"accountEnabled\":{\"nativeName\":\"accountEnabled\",\"nativeType\":\"boolean\",\"required\":true,\"type\":\"boolean\"},\"city\":{\"nativeName\":\"city\",\"nativeType\":\"string\",\"type\":\"string\"},\"companyName\":{\"nativeName\":\"companyName\",\"nativeType\":\"string\",\"type\":\"string\"},\"country\":{\"nativeName\":\"country\",\"nativeType\":\"string\",\"type\":\"string\"},\"department\":{\"nativeName\":\"department\",\"nativeType\":\"string\",\"type\":\"string\"},\"displayName\":{\"nativeName\":\"displayName\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"givenName\":{\"nativeName\":\"givenName\",\"nativeType\":\"string\",\"type\":\"string\"},\"jobTitle\":{\"nativeName\":\"jobTitle\",\"nativeType\":\"string\",\"type\":\"string\"},\"mail\":{\"nativeName\":\"mail\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"mailNickname\":{\"nativeName\":\"mailNickname\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"manager\":{\"nativeName\":\"manager\",\"nativeType\":\"object\",\"type\":\"object\"},\"memberOf\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"memberOf\",\"nativeType\":\"string\",\"type\":\"array\"},\"mobilePhone\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"mobilePhone\",\"nativeType\":\"string\",\"type\":\"string\"},\"onPremisesImmutableId\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"onPremisesImmutableId\",\"nativeType\":\"string\",\"type\":\"string\"},\"onPremisesSecurityIdentifier\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"onPremisesSecurityIdentifier\",\"nativeType\":\"string\",\"type\":\"string\"},\"otherMails\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"otherMails\",\"nativeType\":\"string\",\"type\":\"array\"},\"postalCode\":{\"nativeName\":\"postalCode\",\"nativeType\":\"string\",\"type\":\"string\"},\"preferredLanguage\":{\"nativeName\":\"preferredLanguage\",\"nativeType\":\"string\",\"type\":\"string\"},\"proxyAddresses\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"proxyAddresses\",\"nativeType\":\"string\",\"type\":\"array\"},\"state\":{\"nativeName\":\"state\",\"nativeType\":\"string\",\"type\":\"string\"},\"streetAddress\":{\"nativeName\":\"streetAddress\",\"nativeType\":\"string\",\"type\":\"string\"},\"surname\":{\"nativeName\":\"surname\",\"nativeType\":\"string\",\"type\":\"string\"},\"usageLocation\":{\"nativeName\":\"usageLocation\",\"nativeType\":\"string\",\"type\":\"string\"},\"userPrincipalName\":{\"nativeName\":\"userPrincipalName\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"userType\":{\"nativeName\":\"userType\",\"nativeType\":\"string\",\"type\":\"string\"}},\"type\":\"object\"},\"__GROUP__\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"__GROUP__\",\"nativeType\":\"__GROUP__\",\"properties\":{\"__NAME__\":{\"nativeName\":\"__NAME__\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"description\":{\"nativeName\":\"description\",\"nativeType\":\"string\",\"type\":\"string\"},\"displayName\":{\"nativeName\":\"displayName\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"groupTypes\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"groupTypes\",\"nativeType\":\"string\",\"type\":\"string\"},\"id\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"id\",\"type\":\"string\"},\"mail\":{\"nativeName\":\"mail\",\"nativeType\":\"string\",\"type\":\"string\"},\"mailEnabled\":{\"nativeName\":\"mailEnabled\",\"nativeType\":\"boolean\",\"required\":true,\"type\":\"boolean\"},\"onPremisesSecurityIdentifier\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"onPremisesSecurityIdentifier\",\"nativeType\":\"string\",\"type\":\"string\"},\"proxyAddresses\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"proxyAddresses\",\"nativeType\":\"string\",\"type\":\"array\"},\"securityEnabled\":{\"nativeName\":\"securityEnabled\",\"nativeType\":\"boolean\",\"required\":true,\"type\":\"boolean\"},\"type\":{\"nativeName\":\"type\",\"required\":true,\"type\":\"string\"}},\"type\":\"object\"},\"directoryRole\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"directoryRole\",\"nativeType\":\"directoryRole\",\"properties\":{\"description\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"description\",\"nativeType\":\"string\",\"type\":\"string\"},\"displayName\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"displayName\",\"nativeType\":\"string\",\"type\":\"string\"}},\"type\":\"object\"},\"servicePlan\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"servicePlan\",\"nativeType\":\"servicePlan\",\"properties\":{\"__NAME__\":{\"nativeName\":\"__NAME__\",\"nativeType\":\"string\",\"type\":\"string\"},\"appliesTo\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"appliesTo\",\"nativeType\":\"string\",\"type\":\"string\"},\"provisioningStatus\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"provisioningStatus\",\"nativeType\":\"string\",\"type\":\"string\"},\"servicePlanId\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"servicePlanId\",\"nativeType\":\"string\",\"type\":\"string\"},\"servicePlanName\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"servicePlanName\",\"nativeType\":\"string\",\"type\":\"string\"},\"subscriberSkuId\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"subscriberSkuId\",\"type\":\"string\"}},\"type\":\"object\"},\"servicePrincipal\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"servicePrincipal\",\"nativeType\":\"servicePrincipal\",\"properties\":{\"__NAME__\":{\"nativeName\":\"__NAME__\",\"nativeType\":\"string\",\"type\":\"string\"},\"__addAppRoleAssignedTo__\":{\"flags\":[\"NOT_READABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"__addAppRoleAssignedTo__\",\"nativeType\":\"object\",\"type\":\"array\"},\"__addAppRoleAssignments__\":{\"flags\":[\"NOT_READABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"__addAppRoleAssignments__\",\"nativeType\":\"object\",\"type\":\"array\"},\"__removeAppRoleAssignedTo__\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"__removeAppRoleAssignedTo__\",\"nativeType\":\"string\",\"type\":\"array\"},\"__removeAppRoleAssignments__\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"__removeAppRoleAssignments__\",\"nativeType\":\"string\",\"type\":\"array\"},\"accountEnabled\":{\"nativeName\":\"accountEnabled\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"addIns\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"addIns\",\"nativeType\":\"object\",\"type\":\"array\"},\"alternativeNames\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"alternativeNames\",\"nativeType\":\"string\",\"type\":\"array\"},\"appDescription\":{\"nativeName\":\"appDescription\",\"nativeType\":\"string\",\"type\":\"string\"},\"appDisplayName\":{\"nativeName\":\"appDisplayName\",\"nativeType\":\"string\",\"type\":\"string\"},\"appId\":{\"nativeName\":\"appId\",\"nativeType\":\"string\",\"type\":\"string\"},\"appOwnerOrganizationId\":{\"nativeName\":\"appOwnerOrganizationId\",\"nativeType\":\"string\",\"type\":\"string\"},\"appRoleAssignmentRequired\":{\"nativeName\":\"appRoleAssignmentRequired\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"appRoles\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"appRoles\",\"nativeType\":\"object\",\"type\":\"array\"},\"applicationTemplateId\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"applicationTemplateId\",\"nativeType\":\"string\",\"type\":\"string\"},\"deletedDateTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"deletedDateTime\",\"nativeType\":\"string\",\"type\":\"string\"},\"description\":{\"nativeName\":\"description\",\"nativeType\":\"string\",\"type\":\"string\"},\"disabledByMicrosoftStatus\":{\"nativeName\":\"disabledByMicrosoftStatus\",\"nativeType\":\"string\",\"type\":\"string\"},\"displayName\":{\"nativeName\":\"displayName\",\"nativeType\":\"string\",\"type\":\"string\"},\"homepage\":{\"nativeName\":\"homepage\",\"nativeType\":\"string\",\"type\":\"string\"},\"info\":{\"nativeName\":\"info\",\"nativeType\":\"object\",\"type\":\"object\"},\"keyCredentials\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"keyCredentials\",\"nativeType\":\"object\",\"type\":\"array\"},\"loginUrl\":{\"nativeName\":\"loginUrl\",\"nativeType\":\"string\",\"type\":\"string\"},\"logoutUrl\":{\"nativeName\":\"logoutUrl\",\"nativeType\":\"string\",\"type\":\"string\"},\"notes\":{\"nativeName\":\"notes\",\"nativeType\":\"string\",\"type\":\"string\"},\"notificationEmailAddresses\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"notificationEmailAddresses\",\"nativeType\":\"string\",\"type\":\"array\"},\"oauth2PermissionScopes\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"oauth2PermissionScopes\",\"nativeType\":\"object\",\"type\":\"array\"},\"passwordCredentials\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"passwordCredentials\",\"nativeType\":\"object\",\"type\":\"array\"},\"preferredSingleSignOnMode\":{\"nativeName\":\"preferredSingleSignOnMode\",\"nativeType\":\"string\",\"type\":\"string\"},\"replyUrls\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"replyUrls\",\"nativeType\":\"string\",\"type\":\"array\"},\"resourceSpecificApplicationPermissions\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"resourceSpecificApplicationPermissions\",\"nativeType\":\"object\",\"type\":\"array\"},\"samlSingleSignOnSettings\":{\"nativeName\":\"samlSingleSignOnSettings\",\"nativeType\":\"object\",\"type\":\"object\"},\"servicePrincipalNames\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"servicePrincipalNames\",\"nativeType\":\"string\",\"type\":\"array\"},\"servicePrincipalType\":{\"nativeName\":\"servicePrincipalType\",\"nativeType\":\"string\",\"type\":\"string\"},\"signInAudience\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"signInAudience\",\"nativeType\":\"string\",\"type\":\"string\"},\"tags\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"tags\",\"nativeType\":\"string\",\"type\":\"array\"},\"tokenEncryptionKeyId\":{\"nativeName\":\"tokenEncryptionKeyId\",\"nativeType\":\"string\",\"type\":\"string\"},\"verifiedPublisher\":{\"nativeName\":\"verifiedPublisher\",\"nativeType\":\"object\",\"type\":\"object\"}},\"type\":\"object\"}},\"operationTimeout\":{\"AUTHENTICATE\":-1,\"CREATE\":-1,\"DELETE\":-1,\"GET\":-1,\"RESOLVEUSERNAME\":-1,\"SCHEMA\":-1,\"SCRIPT_ON_CONNECTOR\":-1,\"SCRIPT_ON_RESOURCE\":-1,\"SEARCH\":-1,\"SYNC\":-1,\"TEST\":-1,\"UPDATE\":-1,\"VALIDATE\":-1},\"poolConfigOption\":{\"maxIdle\":10,\"maxObjects\":10,\"maxWait\":150000,\"minEvictableIdleTimeMillis\":120000,\"minIdle\":1},\"resultsHandlerConfig\":{\"enableAttributesToGetSearchResultsHandler\":true,\"enableCaseInsensitiveFilter\":false,\"enableFilteredResultsHandler\":false,\"enableNormalizingResultsHandler\":false}},{\"_id\":\"provisioner.openicf/GoogleApps\",\"configurationProperties\":{\"availableLicenses\":[\"101005/1010050001\",\"101001/1010010001\",\"101031/1010310010\",\"101034/1010340002\",\"101038/1010380002\",\"101034/1010340001\",\"101038/1010380003\",\"101034/1010340004\",\"101034/1010340003\",\"101034/1010340006\",\"Google-Apps/Google-Apps-For-Business\",\"101034/1010340005\",\"Google-Vault/Google-Vault\",\"Google-Apps/1010020031\",\"Google-Apps/1010020030\",\"Google-Apps/1010060003\",\"Google-Apps/1010060005\",\"Google-Apps/Google-Apps-Unlimited\",\"Google-Apps/1010020029\",\"Google-Apps/Google-Apps-Lite\",\"101031/1010310003\",\"101033/1010330002\",\"101033/1010330004\",\"Google-Apps/Google-Apps-For-Education\",\"101031/1010310002\",\"101033/1010330003\",\"Google-Apps/1010020026\",\"101031/1010310007\",\"Google-Apps/1010020025\",\"101031/1010310008\",\"Google-Apps/1010020028\",\"Google-Apps/Google-Apps-For-Postini\",\"101031/1010310005\",\"Google-Apps/1010020027\",\"101031/1010310006\",\"101031/1010310009\",\"Google-Vault/Google-Vault-Former-Employee\",\"101038/1010370001\",\"Google-Apps/1010020020\",\"Google-Apps/1010060001\"],\"clientId\":\"&{esv.gac.client.id}\",\"clientSecret\":\"&{esv.gac.secret}\",\"domain\":\"&{esv.gac.domain}\",\"groupsMaxResults\":\"200\",\"listProductAndSkuMaxResults\":\"100\",\"listProductMaxResults\":\"100\",\"membersMaxResults\":\"200\",\"proxyHost\":null,\"proxyPort\":8080,\"refreshToken\":\"&{esv.gac.refresh}\",\"roleAssignmentMaxResults\":100,\"roleMaxResults\":100,\"usersMaxResults\":\"100\",\"validateCertificate\":true},\"connectorRef\":{\"bundleName\":\"org.forgerock.openicf.connectors.googleapps-connector\",\"bundleVersion\":\"[1.5.0.0,1.6.0.0)\",\"connectorHostRef\":\"\",\"connectorName\":\"org.forgerock.openicf.connectors.googleapps.GoogleAppsConnector\",\"displayName\":\"GoogleApps Connector\",\"systemType\":\"provisioner.openicf\"},\"enabled\":{\"$bool\":\"&{esv.gac.enable.connector}\"},\"objectTypes\":{\"__ACCOUNT__\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"__ACCOUNT__\",\"nativeType\":\"__ACCOUNT__\",\"properties\":{\"__GROUPS__\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"__GROUPS__\",\"nativeType\":\"string\",\"type\":\"array\"},\"__NAME__\":{\"nativeName\":\"__NAME__\",\"nativeType\":\"string\",\"type\":\"string\"},\"__PASSWORD__\":{\"flags\":[\"NOT_READABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"__PASSWORD__\",\"nativeType\":\"JAVA_TYPE_GUARDEDSTRING\",\"required\":true,\"type\":\"string\"},\"__PHOTO__\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"__PHOTO__\",\"nativeType\":\"JAVA_TYPE_BYTE_ARRAY\",\"type\":\"string\"},\"__SECONDARY_EMAILS__\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"__SECONDARY_EMAILS__\",\"nativeType\":\"object\",\"type\":\"array\"},\"__UID__\":{\"nativeName\":\"__UID__\",\"nativeType\":\"string\",\"required\":false,\"type\":\"string\"},\"addresses\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"addresses\",\"nativeType\":\"object\",\"type\":\"array\"},\"agreedToTerms\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"agreedToTerms\",\"nativeType\":\"JAVA_TYPE_PRIMITIVE_BOOLEAN\",\"type\":\"boolean\"},\"aliases\":{\"flags\":[\"NOT_CREATABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"aliases\",\"nativeType\":\"string\",\"type\":\"array\"},\"archived\":{\"nativeName\":\"archived\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"changePasswordAtNextLogin\":{\"nativeName\":\"changePasswordAtNextLogin\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"creationTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"creationTime\",\"nativeType\":\"string\",\"type\":\"array\"},\"customSchemas\":{\"nativeName\":\"customSchemas\",\"nativeType\":\"object\",\"type\":\"object\"},\"customerId\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"customerId\",\"nativeType\":\"string\",\"type\":\"string\"},\"deletionTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"deletionTime\",\"nativeType\":\"string\",\"type\":\"string\"},\"externalIds\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"externalIds\",\"nativeType\":\"object\",\"type\":\"array\"},\"familyName\":{\"nativeName\":\"familyName\",\"nativeType\":\"string\",\"type\":\"string\"},\"fullName\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"fullName\",\"nativeType\":\"string\",\"type\":\"string\"},\"givenName\":{\"nativeName\":\"givenName\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"hashFunction\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"hashFunction\",\"nativeType\":\"string\",\"type\":\"string\"},\"ims\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"ims\",\"nativeType\":\"object\",\"type\":\"array\"},\"includeInGlobalAddressList\":{\"nativeName\":\"includeInGlobalAddressList\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"ipWhitelisted\":{\"nativeName\":\"ipWhitelisted\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"isAdmin\":{\"nativeName\":\"isAdmin\",\"nativeType\":\"JAVA_TYPE_PRIMITIVE_BOOLEAN\",\"type\":\"boolean\"},\"isDelegatedAdmin\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isDelegatedAdmin\",\"nativeType\":\"JAVA_TYPE_PRIMITIVE_BOOLEAN\",\"type\":\"boolean\"},\"isEnforcedIn2Sv\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isEnforcedIn2Sv\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"isEnrolledIn2Sv\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isEnrolledIn2Sv\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"isMailboxSetup\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isMailboxSetup\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"languages\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"languages\",\"nativeType\":\"object\",\"type\":\"array\"},\"lastLoginTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"lastLoginTime\",\"nativeType\":\"string\",\"type\":\"array\"},\"nonEditableAliases\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"nonEditableAliases\",\"nativeType\":\"string\",\"type\":\"array\"},\"orgUnitPath\":{\"nativeName\":\"orgUnitPath\",\"nativeType\":\"string\",\"type\":\"string\"},\"organizations\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"organizations\",\"nativeType\":\"object\",\"type\":\"array\"},\"phones\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"phones\",\"nativeType\":\"object\",\"type\":\"array\"},\"primaryEmail\":{\"nativeName\":\"primaryEmail\",\"nativeType\":\"string\",\"type\":\"string\"},\"recoveryEmail\":{\"nativeName\":\"recoveryEmail\",\"nativeType\":\"string\",\"type\":\"string\"},\"recoveryPhone\":{\"nativeName\":\"recoveryPhone\",\"nativeType\":\"string\",\"type\":\"string\"},\"relations\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"relations\",\"nativeType\":\"object\",\"type\":\"array\"},\"suspended\":{\"nativeName\":\"suspended\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"suspensionReason\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"suspensionReason\",\"nativeType\":\"string\",\"type\":\"string\"},\"thumbnailPhotoUrl\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"thumbnailPhotoUrl\",\"nativeType\":\"string\",\"type\":\"string\"}},\"type\":\"object\"}},\"operationTimeout\":{\"AUTHENTICATE\":-1,\"CREATE\":-1,\"DELETE\":-1,\"GET\":-1,\"RESOLVEUSERNAME\":-1,\"SCHEMA\":-1,\"SCRIPT_ON_CONNECTOR\":-1,\"SCRIPT_ON_RESOURCE\":-1,\"SEARCH\":-1,\"SYNC\":-1,\"TEST\":-1,\"UPDATE\":-1,\"VALIDATE\":-1},\"poolConfigOption\":{\"maxIdle\":10,\"maxObjects\":10,\"maxWait\":150000,\"minEvictableIdleTimeMillis\":120000,\"minIdle\":1},\"resultsHandlerConfig\":{\"enableAttributesToGetSearchResultsHandler\":true,\"enableCaseInsensitiveFilter\":false,\"enableFilteredResultsHandler\":false,\"enableNormalizingResultsHandler\":false}},{\"_id\":\"repo.ds\",\"commands\":{\"delete-mapping-links\":{\"_queryFilter\":\"/linkType eq \\\"${mapping}\\\"\",\"operation\":\"DELETE\"},\"delete-target-ids-for-recon\":{\"_queryFilter\":\"/reconId eq \\\"${reconId}\\\"\",\"operation\":\"DELETE\"}},\"embedded\":false,\"ldapConnectionFactories\":{\"bind\":{\"availabilityCheckIntervalSeconds\":30,\"availabilityCheckTimeoutMilliSeconds\":10000,\"connectionPoolSize\":50,\"connectionSecurity\":\"none\",\"heartBeatIntervalSeconds\":60,\"heartBeatTimeoutMilliSeconds\":10000,\"primaryLdapServers\":[{\"hostname\":\"userstore-0.userstore\",\"port\":1389}],\"secondaryLdapServers\":[{\"hostname\":\"userstore-2.userstore\",\"port\":1389}]},\"root\":{\"authentication\":{\"simple\":{\"bindDn\":\"uid=admin\",\"bindPassword\":\"&{userstore.password}\"}},\"inheritFrom\":\"bind\"}},\"maxConnectionAttempts\":5,\"queries\":{\"explicit\":{\"credential-internaluser-query\":{\"_queryFilter\":\"/_id eq \\\"${username}\\\"\"},\"credential-query\":{\"_queryFilter\":\"/userName eq \\\"${username}\\\"\"},\"for-userName\":{\"_queryFilter\":\"/userName eq \\\"${uid}\\\"\"},\"links-for-firstId\":{\"_queryFilter\":\"/linkType eq \\\"${linkType}\\\" AND /firstId = \\\"${firstId}\\\"\"},\"links-for-linkType\":{\"_queryFilter\":\"/linkType eq \\\"${linkType}\\\"\"},\"query-all\":{\"_queryFilter\":\"true\"},\"query-all-ids\":{\"_fields\":\"_id,_rev\",\"_queryFilter\":\"true\"}},\"generic\":{\"credential-internaluser-query\":{\"_queryFilter\":\"/_id eq \\\"${username}\\\"\"},\"credential-query\":{\"_queryFilter\":\"/userName eq \\\"${username}\\\"\"},\"find-relationship-edges\":{\"_queryFilter\":\"((/firstResourceCollection eq \\\"${firstResourceCollection}\\\" and /firstResourceId eq \\\"${firstResourceId}\\\" and /firstPropertyName eq \\\"${firstPropertyName}\\\") and (/secondResourceCollection eq \\\"${secondResourceCollection}\\\" and /secondResourceId eq \\\"${secondResourceId}\\\" and /secondPropertyName eq \\\"${secondPropertyName}\\\")) or ((/firstResourceCollection eq \\\"${secondResourceCollection}\\\" and /firstResourceId eq \\\"${secondResourceId}\\\" and /firstPropertyName eq \\\"${secondPropertyName}\\\") and (/secondResourceCollection eq \\\"${firstResourceCollection}\\\" and /secondResourceId eq \\\"${firstResourceId}\\\" and /secondPropertyName eq \\\"${firstPropertyName}\\\"))\"},\"find-relationships-for-resource\":{\"_queryFilter\":\"(/firstResourceCollection eq \\\"${resourceCollection}\\\" and /firstResourceId eq \\\"${resourceId}\\\" and /firstPropertyName eq \\\"${propertyName}\\\") or (/secondResourceCollection eq \\\"${resourceCollection}\\\" and /secondResourceId eq \\\"${resourceId}\\\" and /secondPropertyName eq \\\"${propertyName}\\\")\"},\"for-userName\":{\"_queryFilter\":\"/userName eq \\\"${uid}\\\"\"},\"get-by-field-value\":{\"_queryFilter\":\"/${field} eq \\\"${value}\\\"\"},\"get-notifications-for-user\":{\"_queryFilter\":\"/receiverId eq \\\"${userId}\\\"\",\"_sortKeys\":\"-createDate\"},\"get-recons\":{\"_fields\":\"reconId,mapping,activitydate\",\"_queryFilter\":\"/entryType eq \\\"summary\\\"\",\"_sortKeys\":\"-activitydate\"},\"links-for-firstId\":{\"_queryFilter\":\"/linkType eq \\\"${linkType}\\\" AND /firstId = \\\"${firstId}\\\"\"},\"links-for-linkType\":{\"_queryFilter\":\"/linkType eq \\\"${linkType}\\\"\"},\"query-all\":{\"_queryFilter\":\"true\"},\"query-all-ids\":{\"_fields\":\"_id,_rev\",\"_queryFilter\":\"true\"},\"query-cluster-events\":{\"_queryFilter\":\"/instanceId eq \\\"${instanceId}\\\"\"},\"query-cluster-failed-instances\":{\"_queryFilter\":\"/timestamp le ${timestamp} and (/state eq \\\"1\\\" or /state eq \\\"2\\\")\"},\"query-cluster-instances\":{\"_queryFilter\":\"true\"},\"query-cluster-running-instances\":{\"_queryFilter\":\"/state eq 1\"}}},\"resourceMapping\":{\"defaultMapping\":{\"dnTemplate\":\"ou=generic,dc=openidm,dc=example,dc=com\"},\"explicitMapping\":{\"clusteredrecontargetids\":{\"dnTemplate\":\"ou=clusteredrecontargetids,dc=openidm,dc=example,dc=com\",\"objectClasses\":[\"uidObject\",\"fr-idm-recon-clusteredTargetIds\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"uid\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"reconId\":{\"ldapAttribute\":\"fr-idm-recon-id\",\"type\":\"simple\"},\"targetIds\":{\"ldapAttribute\":\"fr-idm-recon-targetIds\",\"type\":\"json\"}}},\"dsconfig/attributeValue\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-attribute-value-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"checkSubstrings\":{\"ldapAttribute\":\"ds-cfg-check-substrings\",\"type\":\"simple\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"matchAttribute\":{\"isMultiValued\":true,\"ldapAttribute\":\"ds-cfg-match-attribute\",\"type\":\"simple\"},\"minSubstringLength\":{\"ldapAttribute\":\"ds-cfg-min-substring-length\",\"type\":\"simple\"},\"testReversedPassword\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-test-reversed-password\",\"type\":\"simple\"}}},\"dsconfig/characterSet\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-character-set-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"allowUnclassifiedCharacters\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-allow-unclassified-characters\",\"type\":\"simple\"},\"characterSet\":{\"isMultiValued\":true,\"ldapAttribute\":\"ds-cfg-character-set\",\"type\":\"simple\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"minCharacterSets\":{\"ldapAttribute\":\"ds-cfg-min-character-sets\",\"type\":\"simple\"}}},\"dsconfig/dictionary\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-dictionary-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"caseSensitiveValidation\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-case-sensitive-validation\",\"type\":\"simple\"},\"checkSubstrings\":{\"ldapAttribute\":\"ds-cfg-check-substrings\",\"type\":\"simple\"},\"dictionaryFile\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-dictionary-file\",\"type\":\"simple\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"minSubstringLength\":{\"ldapAttribute\":\"ds-cfg-min-substring-length\",\"type\":\"simple\"},\"testReversedPassword\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-test-reversed-password\",\"type\":\"simple\"}}},\"dsconfig/lengthBased\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-length-based-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"maxPasswordLength\":{\"ldapAttribute\":\"ds-cfg-max-password-length\",\"type\":\"simple\"},\"minPasswordLength\":{\"ldapAttribute\":\"ds-cfg-min-password-length\",\"type\":\"simple\"}}},\"dsconfig/passwordPolicies\":{\"dnTemplate\":\"cn=Password Policies,cn=config\",\"objectClasses\":[\"ds-cfg-password-policy\",\"ds-cfg-authentication-policy\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"allowPreEncodedPasswords\":{\"ldapAttribute\":\"ds-cfg-allow-pre-encoded-passwords\",\"type\":\"simple\"},\"defaultPasswordStorageScheme\":{\"isMultiValued\":true,\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-default-password-storage-scheme\",\"type\":\"simple\"},\"deprecatedPasswordStorageScheme\":{\"isMultiValued\":true,\"ldapAttribute\":\"ds-cfg-deprecated-password-storage-scheme\",\"type\":\"simple\"},\"maxPasswordAge\":{\"ldapAttribute\":\"ds-cfg-max-password-age\",\"type\":\"simple\"},\"passwordAttribute\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-password-attribute\",\"type\":\"simple\"},\"passwordHistoryCount\":{\"ldapAttribute\":\"ds-cfg-password-history-count\",\"type\":\"simple\"},\"validator\":{\"isMultiValued\":true,\"ldapAttribute\":\"ds-cfg-password-validator\",\"type\":\"simple\"}}},\"dsconfig/repeatedCharacters\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-repeated-characters-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"caseSensitiveValidation\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-case-sensitive-validation\",\"type\":\"simple\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"maxConsecutiveLength\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-max-consecutive-length\",\"type\":\"simple\"}}},\"dsconfig/similarityBased\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-similarity-based-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"minPasswordDifference\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-min-password-difference\",\"type\":\"simple\"}}},\"dsconfig/uniqueCharacters\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-unique-characters-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"caseSensitiveValidation\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-case-sensitive-validation\",\"type\":\"simple\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"minUniqueCharacters\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-min-unique-characters\",\"type\":\"simple\"}}},\"dsconfig/userDefinedVirtualAttribute\":{\"dnTemplate\":\"cn=Virtual Attributes,cn=config\",\"objectClasses\":[\"ds-cfg-user-defined-virtual-attribute\",\"ds-cfg-virtual-attribute\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"attributeType\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-attribute-type\",\"type\":\"simple\"},\"baseDn\":{\"isMultiValued\":true,\"ldapAttribute\":\"ds-cfg-base-dn\",\"type\":\"simple\"},\"conflictBehavior\":{\"ldapAttribute\":\"ds-cfg-conflict-behavior\",\"type\":\"simple\"},\"enabled\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"filter\":{\"isMultiValued\":true,\"ldapAttribute\":\"ds-cfg-filter\",\"type\":\"simple\"},\"groupDn\":{\"ldapAttribute\":\"ds-cfg-group-dn\",\"type\":\"simple\"},\"javaClass\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"scope\":{\"ldapAttribute\":\"ds-cfg-scope\",\"type\":\"simple\"},\"value\":{\"isMultiValued\":true,\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-value\",\"type\":\"simple\"}}},\"identities/admin\":{\"dnTemplate\":\"o=root,ou=identities\",\"isReadOnly\":true,\"namingStrategy\":{\"dnAttribute\":\"ou\",\"type\":\"clientDnNaming\"},\"objectClasses\":[\"organizationalunit\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"ou\",\"primaryKey\":true,\"type\":\"simple\"},\"count\":{\"isRequired\":true,\"ldapAttribute\":\"numSubordinates\",\"type\":\"simple\",\"writability\":\"readOnly\"}}},\"identities/alpha\":{\"dnTemplate\":\"o=alpha,o=root,ou=identities\",\"isReadOnly\":true,\"namingStrategy\":{\"dnAttribute\":\"ou\",\"type\":\"clientDnNaming\"},\"objectClasses\":[\"organizationalunit\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"ou\",\"primaryKey\":true,\"type\":\"simple\"},\"count\":{\"isRequired\":true,\"ldapAttribute\":\"numSubordinates\",\"type\":\"simple\",\"writability\":\"readOnly\"}}},\"identities/bravo\":{\"dnTemplate\":\"o=bravo,o=root,ou=identities\",\"isReadOnly\":true,\"namingStrategy\":{\"dnAttribute\":\"ou\",\"type\":\"clientDnNaming\"},\"objectClasses\":[\"organizationalunit\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"ou\",\"primaryKey\":true,\"type\":\"simple\"},\"count\":{\"isRequired\":true,\"ldapAttribute\":\"numSubordinates\",\"type\":\"simple\",\"writability\":\"readOnly\"}}},\"internal/role\":{\"dnTemplate\":\"ou=roles,ou=internal,dc=openidm,dc=example,dc=com\",\"objectClasses\":[\"fr-idm-internal-role\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"authzMembers\":{\"isMultiValued\":true,\"propertyName\":\"authzRoles\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"},\"condition\":{\"ldapAttribute\":\"fr-idm-condition\",\"type\":\"simple\"},\"description\":{\"ldapAttribute\":\"description\",\"type\":\"simple\"},\"name\":{\"ldapAttribute\":\"fr-idm-name\",\"type\":\"simple\"},\"privileges\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-privilege\",\"type\":\"json\"},\"temporalConstraints\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-temporal-constraints\",\"type\":\"json\"}}},\"internal/user\":{\"dnTemplate\":\"ou=users,ou=internal,dc=openidm,dc=example,dc=com\",\"objectClasses\":[\"uidObject\",\"fr-idm-internal-user\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"uid\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"password\":{\"ldapAttribute\":\"fr-idm-password\",\"type\":\"json\"}}},\"link\":{\"dnTemplate\":\"ou=links,dc=openidm,dc=example,dc=com\",\"objectClasses\":[\"uidObject\",\"fr-idm-link\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"uid\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"firstId\":{\"ldapAttribute\":\"fr-idm-link-firstId\",\"type\":\"simple\"},\"linkQualifier\":{\"ldapAttribute\":\"fr-idm-link-qualifier\",\"type\":\"simple\"},\"linkType\":{\"ldapAttribute\":\"fr-idm-link-type\",\"type\":\"simple\"},\"secondId\":{\"ldapAttribute\":\"fr-idm-link-secondId\",\"type\":\"simple\"}}},\"locks\":{\"dnTemplate\":\"ou=locks,dc=openidm,dc=example,dc=com\",\"objectClasses\":[\"uidObject\",\"fr-idm-lock\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"uid\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"nodeId\":{\"ldapAttribute\":\"fr-idm-lock-nodeid\",\"type\":\"simple\"}}},\"managed/teammember\":{\"dnTemplate\":\"ou=people,o=root,ou=identities\",\"namingStrategy\":{\"dnAttribute\":\"fr-idm-uuid\",\"type\":\"clientDnNaming\"},\"nativeId\":false,\"objectClasses\":[\"person\",\"organizationalPerson\",\"inetOrgPerson\",\"fraas-admin\",\"iplanet-am-user-service\",\"deviceProfilesContainer\",\"devicePrintProfilesContainer\",\"kbaInfoContainer\",\"fr-idm-managed-user-explicit\",\"forgerock-am-dashboard-service\",\"inetuser\",\"iplanet-am-auth-configuration-service\",\"iplanet-am-managed-person\",\"iPlanetPreferences\",\"oathDeviceProfilesContainer\",\"pushDeviceProfilesContainer\",\"sunAMAuthAccountLockout\",\"sunFMSAML2NameIdentifier\",\"webauthnDeviceProfilesContainer\",\"fr-idm-hybrid-obj\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"fr-idm-uuid\",\"primaryKey\":true,\"type\":\"simple\"},\"_meta\":{\"isMultiValued\":false,\"ldapAttribute\":\"fr-idm-managed-user-meta\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/teammembermeta\",\"type\":\"reference\"},\"accountStatus\":{\"ldapAttribute\":\"inetUserStatus\",\"type\":\"simple\"},\"cn\":{\"ldapAttribute\":\"cn\",\"type\":\"simple\"},\"givenName\":{\"ldapAttribute\":\"givenName\",\"type\":\"simple\"},\"inviteDate\":{\"ldapAttribute\":\"fr-idm-inviteDate\",\"type\":\"simple\"},\"jurisdiction\":{\"ldapAttribute\":\"fr-idm-jurisdiction\",\"type\":\"simple\"},\"mail\":{\"ldapAttribute\":\"mail\",\"type\":\"simple\"},\"onboardDate\":{\"ldapAttribute\":\"fr-idm-onboardDate\",\"type\":\"simple\"},\"password\":{\"ldapAttribute\":\"userPassword\",\"type\":\"simple\"},\"sn\":{\"ldapAttribute\":\"sn\",\"type\":\"simple\"},\"userName\":{\"ldapAttribute\":\"uid\",\"type\":\"simple\"}}},\"managed/teammembergroup\":{\"dnTemplate\":\"ou=groups,o=root,ou=identities\",\"objectClasses\":[\"groupofuniquenames\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"cn\",\"primaryKey\":true,\"type\":\"simple\"},\"members\":{\"isMultiValued\":true,\"ldapAttribute\":\"uniqueMember\",\"type\":\"simple\"}}},\"recon/assoc\":{\"dnTemplate\":\"ou=assoc,ou=recon,dc=openidm,dc=example,dc=com\",\"namingStrategy\":{\"dnAttribute\":\"fr-idm-reconassoc-reconid\",\"type\":\"clientDnNaming\"},\"objectClasses\":[\"fr-idm-reconassoc\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"fr-idm-reconassoc-reconid\",\"type\":\"simple\"},\"finishTime\":{\"ldapAttribute\":\"fr-idm-reconassoc-finishtime\",\"type\":\"simple\"},\"isAnalysis\":{\"ldapAttribute\":\"fr-idm-reconassoc-isanalysis\",\"type\":\"simple\"},\"mapping\":{\"ldapAttribute\":\"fr-idm-reconassoc-mapping\",\"type\":\"simple\"},\"sourceResourceCollection\":{\"ldapAttribute\":\"fr-idm-reconassoc-sourceresourcecollection\",\"type\":\"simple\"},\"targetResourceCollection\":{\"ldapAttribute\":\"fr-idm-reconassoc-targetresourcecollection\",\"type\":\"simple\"}},\"subResources\":{\"entry\":{\"namingStrategy\":{\"dnAttribute\":\"uid\",\"type\":\"clientDnNaming\"},\"resource\":\"recon-assoc-entry\",\"type\":\"collection\"}}},\"recon/assoc/entry\":{\"objectClasses\":[\"uidObject\",\"fr-idm-reconassocentry\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"uid\",\"type\":\"simple\"},\"action\":{\"ldapAttribute\":\"fr-idm-reconassocentry-action\",\"type\":\"simple\"},\"ambiguousTargetObjectIds\":{\"ldapAttribute\":\"fr-idm-reconassocentry-ambiguoustargetobjectids\",\"type\":\"simple\"},\"exception\":{\"ldapAttribute\":\"fr-idm-reconassocentry-exception\",\"type\":\"simple\"},\"isAnalysis\":{\"ldapAttribute\":\"fr-idm-reconassoc-isanalysis\",\"type\":\"simple\"},\"linkQualifier\":{\"ldapAttribute\":\"fr-idm-reconassocentry-linkqualifier\",\"type\":\"simple\"},\"mapping\":{\"ldapAttribute\":\"fr-idm-reconassoc-mapping\",\"type\":\"simple\"},\"message\":{\"ldapAttribute\":\"fr-idm-reconassocentry-message\",\"type\":\"simple\"},\"messageDetail\":{\"ldapAttribute\":\"fr-idm-reconassocentry-messagedetail\",\"type\":\"simple\"},\"phase\":{\"ldapAttribute\":\"fr-idm-reconassocentry-phase\",\"type\":\"simple\"},\"reconId\":{\"ldapAttribute\":\"fr-idm-reconassocentry-reconid\",\"type\":\"simple\"},\"situation\":{\"ldapAttribute\":\"fr-idm-reconassocentry-situation\",\"type\":\"simple\"},\"sourceObjectId\":{\"ldapAttribute\":\"fr-idm-reconassocentry-sourceObjectId\",\"type\":\"simple\"},\"sourceResourceCollection\":{\"ldapAttribute\":\"fr-idm-reconassoc-sourceresourcecollection\",\"type\":\"simple\"},\"status\":{\"ldapAttribute\":\"fr-idm-reconassocentry-status\",\"type\":\"simple\"},\"targetObjectId\":{\"ldapAttribute\":\"fr-idm-reconassocentry-targetObjectId\",\"type\":\"simple\"},\"targetResourceCollection\":{\"ldapAttribute\":\"fr-idm-reconassoc-targetresourcecollection\",\"type\":\"simple\"}},\"resourceName\":\"recon-assoc-entry\",\"subResourceRouting\":[{\"prefix\":\"entry\",\"template\":\"recon/assoc/{reconId}/entry\"}]},\"sync/queue\":{\"dnTemplate\":\"ou=queue,ou=sync,dc=openidm,dc=example,dc=com\",\"objectClasses\":[\"uidObject\",\"fr-idm-syncqueue\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"uid\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"context\":{\"ldapAttribute\":\"fr-idm-syncqueue-context\",\"type\":\"json\"},\"createDate\":{\"ldapAttribute\":\"fr-idm-syncqueue-createdate\",\"type\":\"simple\"},\"mapping\":{\"ldapAttribute\":\"fr-idm-syncqueue-mapping\",\"type\":\"simple\"},\"newObject\":{\"ldapAttribute\":\"fr-idm-syncqueue-newobject\",\"type\":\"json\"},\"nodeId\":{\"ldapAttribute\":\"fr-idm-syncqueue-nodeid\",\"type\":\"simple\"},\"objectRev\":{\"ldapAttribute\":\"fr-idm-syncqueue-objectRev\",\"type\":\"simple\"},\"oldObject\":{\"ldapAttribute\":\"fr-idm-syncqueue-oldobject\",\"type\":\"json\"},\"remainingRetries\":{\"ldapAttribute\":\"fr-idm-syncqueue-remainingretries\",\"type\":\"simple\"},\"resourceCollection\":{\"ldapAttribute\":\"fr-idm-syncqueue-resourcecollection\",\"type\":\"simple\"},\"resourceId\":{\"ldapAttribute\":\"fr-idm-syncqueue-resourceid\",\"type\":\"simple\"},\"state\":{\"ldapAttribute\":\"fr-idm-syncqueue-state\",\"type\":\"simple\"},\"syncAction\":{\"ldapAttribute\":\"fr-idm-syncqueue-syncaction\",\"type\":\"simple\"}}}},\"genericMapping\":{\"cluster/*\":{\"dnTemplate\":\"ou=cluster,dc=openidm,dc=example,dc=com\",\"jsonAttribute\":\"fr-idm-cluster-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatchClusterObject\",\"objectClasses\":[\"uidObject\",\"fr-idm-cluster-obj\"]},\"config\":{\"dnTemplate\":\"ou=config,dc=openidm,dc=example,dc=com\"},\"file\":{\"dnTemplate\":\"ou=file,dc=openidm,dc=example,dc=com\"},\"internal/notification\":{\"dnTemplate\":\"ou=notification,ou=internal,dc=openidm,dc=example,dc=com\",\"jsonAttribute\":\"fr-idm-notification-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-notification\"],\"properties\":{\"target\":{\"propertyName\":\"_notifications\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"}}},\"internal/usermeta\":{\"dnTemplate\":\"ou=usermeta,ou=internal,dc=openidm,dc=example,dc=com\",\"jsonAttribute\":\"fr-idm-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-generic-obj\"],\"properties\":{\"target\":{\"propertyName\":\"_meta\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"}}},\"jsonstorage\":{\"dnTemplate\":\"ou=jsonstorage,dc=openidm,dc=example,dc=com\"},\"managed/*\":{\"dnTemplate\":\"ou=managed,dc=openidm,dc=example,dc=com\"},\"managed/alpha_group\":{\"dnTemplate\":\"ou=groups,o=alpha,o=root,ou=identities\",\"idGenerator\":{\"propertyName\":\"name\",\"type\":\"property\"},\"jsonAttribute\":\"fr-idm-managed-group-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"namingStrategy\":{\"dnAttribute\":\"cn\",\"type\":\"clientDnNaming\"},\"nativeId\":false,\"objectClasses\":[\"top\",\"groupOfURLs\",\"fr-idm-managed-group\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"cn\",\"primaryKey\":true,\"type\":\"simple\",\"writability\":\"createOnly\"},\"condition\":{\"ldapAttribute\":\"fr-idm-managed-group-condition\",\"type\":\"simple\"},\"description\":{\"ldapAttribute\":\"description\",\"type\":\"simple\"},\"members\":{\"isMultiValued\":true,\"propertyName\":\"groups\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"}}},\"managed/alpha_organization\":{\"dnTemplate\":\"ou=organization,o=alpha,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-managed-organization-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-managed-organization\",\"fr-ext-attrs\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"uid\",\"type\":\"simple\"},\"admins\":{\"isMultiValued\":true,\"propertyName\":\"adminOfOrg\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"},\"children\":{\"isMultiValued\":true,\"propertyName\":\"parent\",\"resourcePath\":\"managed/alpha_organization\",\"type\":\"reverseReference\"},\"members\":{\"isMultiValued\":true,\"propertyName\":\"memberOfOrg\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"},\"name\":{\"ldapAttribute\":\"fr-idm-managed-organization-name\",\"type\":\"simple\"},\"owners\":{\"isMultiValued\":true,\"propertyName\":\"ownerOfOrg\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"},\"parent\":{\"ldapAttribute\":\"fr-idm-managed-organization-parent\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_organization\",\"type\":\"reference\"}}},\"managed/alpha_role\":{\"dnTemplate\":\"ou=role,o=alpha,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-managed-role-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatchManagedRole\",\"objectClasses\":[\"uidObject\",\"fr-idm-managed-role\"],\"properties\":{\"members\":{\"isMultiValued\":true,\"propertyName\":\"roles\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"}}},\"managed/alpha_user\":{\"dnTemplate\":\"ou=user,o=alpha,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-custom-attrs\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"namingStrategy\":{\"dnAttribute\":\"fr-idm-uuid\",\"type\":\"clientDnNaming\"},\"nativeId\":false,\"objectClasses\":[\"person\",\"organizationalPerson\",\"inetOrgPerson\",\"iplanet-am-user-service\",\"devicePrintProfilesContainer\",\"deviceProfilesContainer\",\"kbaInfoContainer\",\"fr-idm-managed-user-explicit\",\"forgerock-am-dashboard-service\",\"inetuser\",\"iplanet-am-auth-configuration-service\",\"iplanet-am-managed-person\",\"iPlanetPreferences\",\"oathDeviceProfilesContainer\",\"pushDeviceProfilesContainer\",\"sunAMAuthAccountLockout\",\"sunFMSAML2NameIdentifier\",\"webauthnDeviceProfilesContainer\",\"fr-idm-hybrid-obj\",\"fr-ext-attrs\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"fr-idm-uuid\",\"primaryKey\":true,\"type\":\"simple\"},\"_meta\":{\"isMultiValued\":false,\"ldapAttribute\":\"fr-idm-managed-user-meta\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_usermeta\",\"type\":\"reference\"},\"_notifications\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-notifications\",\"primaryKey\":\"uid\",\"resourcePath\":\"internal/notification\",\"type\":\"reference\"},\"accountStatus\":{\"ldapAttribute\":\"inetUserStatus\",\"type\":\"simple\"},\"adminOfOrg\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-organization-admin\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_organization\",\"type\":\"reference\"},\"aliasList\":{\"isMultiValued\":true,\"ldapAttribute\":\"iplanet-am-user-alias-list\",\"type\":\"simple\"},\"assignedDashboard\":{\"isMultiValued\":true,\"ldapAttribute\":\"assignedDashboard\",\"type\":\"simple\"},\"authzRoles\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-authzroles-internal-role\",\"primaryKey\":\"cn\",\"resourcePath\":\"internal/role\",\"type\":\"reference\"},\"city\":{\"ldapAttribute\":\"l\",\"type\":\"simple\"},\"cn\":{\"ldapAttribute\":\"cn\",\"type\":\"simple\"},\"consentedMappings\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-consentedMapping\",\"type\":\"json\"},\"country\":{\"ldapAttribute\":\"co\",\"type\":\"simple\"},\"description\":{\"ldapAttribute\":\"description\",\"type\":\"simple\"},\"displayName\":{\"ldapAttribute\":\"displayName\",\"type\":\"simple\"},\"effectiveAssignments\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-effectiveAssignment\",\"type\":\"json\"},\"effectiveGroups\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-effectiveGroup\",\"type\":\"json\"},\"effectiveRoles\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-effectiveRole\",\"type\":\"json\"},\"frIndexedDate1\":{\"ldapAttribute\":\"fr-attr-idate1\",\"type\":\"simple\"},\"frIndexedDate2\":{\"ldapAttribute\":\"fr-attr-idate2\",\"type\":\"simple\"},\"frIndexedDate3\":{\"ldapAttribute\":\"fr-attr-idate3\",\"type\":\"simple\"},\"frIndexedDate4\":{\"ldapAttribute\":\"fr-attr-idate4\",\"type\":\"simple\"},\"frIndexedDate5\":{\"ldapAttribute\":\"fr-attr-idate5\",\"type\":\"simple\"},\"frIndexedInteger1\":{\"ldapAttribute\":\"fr-attr-iint1\",\"type\":\"simple\"},\"frIndexedInteger2\":{\"ldapAttribute\":\"fr-attr-iint2\",\"type\":\"simple\"},\"frIndexedInteger3\":{\"ldapAttribute\":\"fr-attr-iint3\",\"type\":\"simple\"},\"frIndexedInteger4\":{\"ldapAttribute\":\"fr-attr-iint4\",\"type\":\"simple\"},\"frIndexedInteger5\":{\"ldapAttribute\":\"fr-attr-iint5\",\"type\":\"simple\"},\"frIndexedMultivalued1\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti1\",\"type\":\"simple\"},\"frIndexedMultivalued2\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti2\",\"type\":\"simple\"},\"frIndexedMultivalued3\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti3\",\"type\":\"simple\"},\"frIndexedMultivalued4\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti4\",\"type\":\"simple\"},\"frIndexedMultivalued5\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti5\",\"type\":\"simple\"},\"frIndexedString1\":{\"ldapAttribute\":\"fr-attr-istr1\",\"type\":\"simple\"},\"frIndexedString2\":{\"ldapAttribute\":\"fr-attr-istr2\",\"type\":\"simple\"},\"frIndexedString3\":{\"ldapAttribute\":\"fr-attr-istr3\",\"type\":\"simple\"},\"frIndexedString4\":{\"ldapAttribute\":\"fr-attr-istr4\",\"type\":\"simple\"},\"frIndexedString5\":{\"ldapAttribute\":\"fr-attr-istr5\",\"type\":\"simple\"},\"frUnindexedDate1\":{\"ldapAttribute\":\"fr-attr-date1\",\"type\":\"simple\"},\"frUnindexedDate2\":{\"ldapAttribute\":\"fr-attr-date2\",\"type\":\"simple\"},\"frUnindexedDate3\":{\"ldapAttribute\":\"fr-attr-date3\",\"type\":\"simple\"},\"frUnindexedDate4\":{\"ldapAttribute\":\"fr-attr-date4\",\"type\":\"simple\"},\"frUnindexedDate5\":{\"ldapAttribute\":\"fr-attr-date5\",\"type\":\"simple\"},\"frUnindexedInteger1\":{\"ldapAttribute\":\"fr-attr-int1\",\"type\":\"simple\"},\"frUnindexedInteger2\":{\"ldapAttribute\":\"fr-attr-int2\",\"type\":\"simple\"},\"frUnindexedInteger3\":{\"ldapAttribute\":\"fr-attr-int3\",\"type\":\"simple\"},\"frUnindexedInteger4\":{\"ldapAttribute\":\"fr-attr-int4\",\"type\":\"simple\"},\"frUnindexedInteger5\":{\"ldapAttribute\":\"fr-attr-int5\",\"type\":\"simple\"},\"frUnindexedMultivalued1\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi1\",\"type\":\"simple\"},\"frUnindexedMultivalued2\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi2\",\"type\":\"simple\"},\"frUnindexedMultivalued3\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi3\",\"type\":\"simple\"},\"frUnindexedMultivalued4\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi4\",\"type\":\"simple\"},\"frUnindexedMultivalued5\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi5\",\"type\":\"simple\"},\"frUnindexedString1\":{\"ldapAttribute\":\"fr-attr-str1\",\"type\":\"simple\"},\"frUnindexedString2\":{\"ldapAttribute\":\"fr-attr-str2\",\"type\":\"simple\"},\"frUnindexedString3\":{\"ldapAttribute\":\"fr-attr-str3\",\"type\":\"simple\"},\"frUnindexedString4\":{\"ldapAttribute\":\"fr-attr-str4\",\"type\":\"simple\"},\"frUnindexedString5\":{\"ldapAttribute\":\"fr-attr-str5\",\"type\":\"simple\"},\"givenName\":{\"ldapAttribute\":\"givenName\",\"type\":\"simple\"},\"groups\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-groups\",\"primaryKey\":\"cn\",\"resourcePath\":\"managed/alpha_group\",\"type\":\"reference\"},\"kbaInfo\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-kbaInfo\",\"type\":\"json\"},\"lastSync\":{\"ldapAttribute\":\"fr-idm-lastSync\",\"type\":\"json\"},\"mail\":{\"ldapAttribute\":\"mail\",\"type\":\"simple\"},\"manager\":{\"isMultiValued\":false,\"ldapAttribute\":\"fr-idm-managed-user-manager\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reference\"},\"memberOfOrg\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-organization-member\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_organization\",\"type\":\"reference\"},\"memberOfOrgIDs\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-memberoforgid\",\"type\":\"simple\"},\"ownerOfOrg\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-organization-owner\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_organization\",\"type\":\"reference\"},\"password\":{\"ldapAttribute\":\"userPassword\",\"type\":\"simple\"},\"postalAddress\":{\"ldapAttribute\":\"street\",\"type\":\"simple\"},\"postalCode\":{\"ldapAttribute\":\"postalCode\",\"type\":\"simple\"},\"preferences\":{\"ldapAttribute\":\"fr-idm-preferences\",\"type\":\"json\"},\"profileImage\":{\"ldapAttribute\":\"labeledURI\",\"type\":\"simple\"},\"reports\":{\"isMultiValued\":true,\"propertyName\":\"manager\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"},\"roles\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-roles\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_role\",\"type\":\"reference\"},\"sn\":{\"ldapAttribute\":\"sn\",\"type\":\"simple\"},\"stateProvince\":{\"ldapAttribute\":\"st\",\"type\":\"simple\"},\"telephoneNumber\":{\"ldapAttribute\":\"telephoneNumber\",\"type\":\"simple\"},\"userName\":{\"ldapAttribute\":\"uid\",\"type\":\"simple\"}}},\"managed/alpha_usermeta\":{\"dnTemplate\":\"ou=usermeta,o=alpha,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-generic-obj\"],\"properties\":{\"target\":{\"propertyName\":\"_meta\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"}}},\"managed/bravo_group\":{\"dnTemplate\":\"ou=groups,o=bravo,o=root,ou=identities\",\"idGenerator\":{\"propertyName\":\"name\",\"type\":\"property\"},\"jsonAttribute\":\"fr-idm-managed-group-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"namingStrategy\":{\"dnAttribute\":\"cn\",\"type\":\"clientDnNaming\"},\"nativeId\":false,\"objectClasses\":[\"top\",\"groupOfURLs\",\"fr-idm-managed-group\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"cn\",\"primaryKey\":true,\"type\":\"simple\",\"writability\":\"createOnly\"},\"condition\":{\"ldapAttribute\":\"fr-idm-managed-group-condition\",\"type\":\"simple\"},\"description\":{\"ldapAttribute\":\"description\",\"type\":\"simple\"},\"members\":{\"isMultiValued\":true,\"propertyName\":\"groups\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"}}},\"managed/bravo_organization\":{\"dnTemplate\":\"ou=organization,o=bravo,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-managed-organization-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-managed-organization\",\"fr-ext-attrs\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"uid\",\"type\":\"simple\"},\"admins\":{\"isMultiValued\":true,\"propertyName\":\"adminOfOrg\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"},\"children\":{\"isMultiValued\":true,\"propertyName\":\"parent\",\"resourcePath\":\"managed/bravo_organization\",\"type\":\"reverseReference\"},\"members\":{\"isMultiValued\":true,\"propertyName\":\"memberOfOrg\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"},\"name\":{\"ldapAttribute\":\"fr-idm-managed-organization-name\",\"type\":\"simple\"},\"owners\":{\"isMultiValued\":true,\"propertyName\":\"ownerOfOrg\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"},\"parent\":{\"ldapAttribute\":\"fr-idm-managed-organization-parent\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_organization\",\"type\":\"reference\"}}},\"managed/bravo_role\":{\"dnTemplate\":\"ou=role,o=bravo,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-managed-role-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatchManagedRole\",\"objectClasses\":[\"uidObject\",\"fr-idm-managed-role\"],\"properties\":{\"members\":{\"isMultiValued\":true,\"propertyName\":\"roles\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"}}},\"managed/bravo_user\":{\"dnTemplate\":\"ou=user,o=bravo,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-custom-attrs\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"namingStrategy\":{\"dnAttribute\":\"fr-idm-uuid\",\"type\":\"clientDnNaming\"},\"nativeId\":false,\"objectClasses\":[\"person\",\"organizationalPerson\",\"inetOrgPerson\",\"iplanet-am-user-service\",\"devicePrintProfilesContainer\",\"deviceProfilesContainer\",\"kbaInfoContainer\",\"fr-idm-managed-user-explicit\",\"forgerock-am-dashboard-service\",\"inetuser\",\"iplanet-am-auth-configuration-service\",\"iplanet-am-managed-person\",\"iPlanetPreferences\",\"oathDeviceProfilesContainer\",\"pushDeviceProfilesContainer\",\"sunAMAuthAccountLockout\",\"sunFMSAML2NameIdentifier\",\"webauthnDeviceProfilesContainer\",\"fr-idm-hybrid-obj\",\"fr-ext-attrs\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"fr-idm-uuid\",\"primaryKey\":true,\"type\":\"simple\"},\"_meta\":{\"isMultiValued\":false,\"ldapAttribute\":\"fr-idm-managed-user-meta\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_usermeta\",\"type\":\"reference\"},\"_notifications\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-notifications\",\"primaryKey\":\"uid\",\"resourcePath\":\"internal/notification\",\"type\":\"reference\"},\"accountStatus\":{\"ldapAttribute\":\"inetUserStatus\",\"type\":\"simple\"},\"adminOfOrg\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-organization-admin\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_organization\",\"type\":\"reference\"},\"aliasList\":{\"isMultiValued\":true,\"ldapAttribute\":\"iplanet-am-user-alias-list\",\"type\":\"simple\"},\"assignedDashboard\":{\"isMultiValued\":true,\"ldapAttribute\":\"assignedDashboard\",\"type\":\"simple\"},\"authzRoles\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-authzroles-internal-role\",\"primaryKey\":\"cn\",\"resourcePath\":\"internal/role\",\"type\":\"reference\"},\"city\":{\"ldapAttribute\":\"l\",\"type\":\"simple\"},\"cn\":{\"ldapAttribute\":\"cn\",\"type\":\"simple\"},\"consentedMappings\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-consentedMapping\",\"type\":\"json\"},\"country\":{\"ldapAttribute\":\"co\",\"type\":\"simple\"},\"description\":{\"ldapAttribute\":\"description\",\"type\":\"simple\"},\"displayName\":{\"ldapAttribute\":\"displayName\",\"type\":\"simple\"},\"effectiveAssignments\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-effectiveAssignment\",\"type\":\"json\"},\"effectiveGroups\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-effectiveGroup\",\"type\":\"json\"},\"effectiveRoles\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-effectiveRole\",\"type\":\"json\"},\"frIndexedDate1\":{\"ldapAttribute\":\"fr-attr-idate1\",\"type\":\"simple\"},\"frIndexedDate2\":{\"ldapAttribute\":\"fr-attr-idate2\",\"type\":\"simple\"},\"frIndexedDate3\":{\"ldapAttribute\":\"fr-attr-idate3\",\"type\":\"simple\"},\"frIndexedDate4\":{\"ldapAttribute\":\"fr-attr-idate4\",\"type\":\"simple\"},\"frIndexedDate5\":{\"ldapAttribute\":\"fr-attr-idate5\",\"type\":\"simple\"},\"frIndexedInteger1\":{\"ldapAttribute\":\"fr-attr-iint1\",\"type\":\"simple\"},\"frIndexedInteger2\":{\"ldapAttribute\":\"fr-attr-iint2\",\"type\":\"simple\"},\"frIndexedInteger3\":{\"ldapAttribute\":\"fr-attr-iint3\",\"type\":\"simple\"},\"frIndexedInteger4\":{\"ldapAttribute\":\"fr-attr-iint4\",\"type\":\"simple\"},\"frIndexedInteger5\":{\"ldapAttribute\":\"fr-attr-iint5\",\"type\":\"simple\"},\"frIndexedMultivalued1\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti1\",\"type\":\"simple\"},\"frIndexedMultivalued2\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti2\",\"type\":\"simple\"},\"frIndexedMultivalued3\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti3\",\"type\":\"simple\"},\"frIndexedMultivalued4\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti4\",\"type\":\"simple\"},\"frIndexedMultivalued5\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti5\",\"type\":\"simple\"},\"frIndexedString1\":{\"ldapAttribute\":\"fr-attr-istr1\",\"type\":\"simple\"},\"frIndexedString2\":{\"ldapAttribute\":\"fr-attr-istr2\",\"type\":\"simple\"},\"frIndexedString3\":{\"ldapAttribute\":\"fr-attr-istr3\",\"type\":\"simple\"},\"frIndexedString4\":{\"ldapAttribute\":\"fr-attr-istr4\",\"type\":\"simple\"},\"frIndexedString5\":{\"ldapAttribute\":\"fr-attr-istr5\",\"type\":\"simple\"},\"frUnindexedDate1\":{\"ldapAttribute\":\"fr-attr-date1\",\"type\":\"simple\"},\"frUnindexedDate2\":{\"ldapAttribute\":\"fr-attr-date2\",\"type\":\"simple\"},\"frUnindexedDate3\":{\"ldapAttribute\":\"fr-attr-date3\",\"type\":\"simple\"},\"frUnindexedDate4\":{\"ldapAttribute\":\"fr-attr-date4\",\"type\":\"simple\"},\"frUnindexedDate5\":{\"ldapAttribute\":\"fr-attr-date5\",\"type\":\"simple\"},\"frUnindexedInteger1\":{\"ldapAttribute\":\"fr-attr-int1\",\"type\":\"simple\"},\"frUnindexedInteger2\":{\"ldapAttribute\":\"fr-attr-int2\",\"type\":\"simple\"},\"frUnindexedInteger3\":{\"ldapAttribute\":\"fr-attr-int3\",\"type\":\"simple\"},\"frUnindexedInteger4\":{\"ldapAttribute\":\"fr-attr-int4\",\"type\":\"simple\"},\"frUnindexedInteger5\":{\"ldapAttribute\":\"fr-attr-int5\",\"type\":\"simple\"},\"frUnindexedMultivalued1\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi1\",\"type\":\"simple\"},\"frUnindexedMultivalued2\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi2\",\"type\":\"simple\"},\"frUnindexedMultivalued3\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi3\",\"type\":\"simple\"},\"frUnindexedMultivalued4\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi4\",\"type\":\"simple\"},\"frUnindexedMultivalued5\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi5\",\"type\":\"simple\"},\"frUnindexedString1\":{\"ldapAttribute\":\"fr-attr-str1\",\"type\":\"simple\"},\"frUnindexedString2\":{\"ldapAttribute\":\"fr-attr-str2\",\"type\":\"simple\"},\"frUnindexedString3\":{\"ldapAttribute\":\"fr-attr-str3\",\"type\":\"simple\"},\"frUnindexedString4\":{\"ldapAttribute\":\"fr-attr-str4\",\"type\":\"simple\"},\"frUnindexedString5\":{\"ldapAttribute\":\"fr-attr-str5\",\"type\":\"simple\"},\"givenName\":{\"ldapAttribute\":\"givenName\",\"type\":\"simple\"},\"groups\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-groups\",\"primaryKey\":\"cn\",\"resourcePath\":\"managed/bravo_group\",\"type\":\"reference\"},\"kbaInfo\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-kbaInfo\",\"type\":\"json\"},\"lastSync\":{\"ldapAttribute\":\"fr-idm-lastSync\",\"type\":\"json\"},\"mail\":{\"ldapAttribute\":\"mail\",\"type\":\"simple\"},\"manager\":{\"isMultiValued\":false,\"ldapAttribute\":\"fr-idm-managed-user-manager\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reference\"},\"memberOfOrg\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-organization-member\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_organization\",\"type\":\"reference\"},\"memberOfOrgIDs\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-memberoforgid\",\"type\":\"simple\"},\"ownerOfOrg\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-organization-owner\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_organization\",\"type\":\"reference\"},\"password\":{\"ldapAttribute\":\"userPassword\",\"type\":\"simple\"},\"postalAddress\":{\"ldapAttribute\":\"street\",\"type\":\"simple\"},\"postalCode\":{\"ldapAttribute\":\"postalCode\",\"type\":\"simple\"},\"preferences\":{\"ldapAttribute\":\"fr-idm-preferences\",\"type\":\"json\"},\"profileImage\":{\"ldapAttribute\":\"labeledURI\",\"type\":\"simple\"},\"reports\":{\"isMultiValued\":true,\"propertyName\":\"manager\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"},\"roles\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-roles\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_role\",\"type\":\"reference\"},\"sn\":{\"ldapAttribute\":\"sn\",\"type\":\"simple\"},\"stateProvince\":{\"ldapAttribute\":\"st\",\"type\":\"simple\"},\"telephoneNumber\":{\"ldapAttribute\":\"telephoneNumber\",\"type\":\"simple\"},\"userName\":{\"ldapAttribute\":\"uid\",\"type\":\"simple\"}}},\"managed/bravo_usermeta\":{\"dnTemplate\":\"ou=usermeta,o=bravo,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-generic-obj\"],\"properties\":{\"target\":{\"propertyName\":\"_meta\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"}}},\"managed/teammembermeta\":{\"dnTemplate\":\"ou=teammembermeta,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-generic-obj\"],\"properties\":{\"target\":{\"propertyName\":\"_meta\",\"resourcePath\":\"managed/teammember\",\"type\":\"reverseReference\"}}},\"reconprogressstate\":{\"dnTemplate\":\"ou=reconprogressstate,dc=openidm,dc=example,dc=com\"},\"relationships\":{\"dnTemplate\":\"ou=relationships,dc=openidm,dc=example,dc=com\",\"jsonAttribute\":\"fr-idm-relationship-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatchRelationship\",\"objectClasses\":[\"uidObject\",\"fr-idm-relationship\"]},\"scheduler\":{\"dnTemplate\":\"ou=scheduler,dc=openidm,dc=example,dc=com\"},\"scheduler/*\":{\"dnTemplate\":\"ou=scheduler,dc=openidm,dc=example,dc=com\"},\"ui/*\":{\"dnTemplate\":\"ou=ui,dc=openidm,dc=example,dc=com\"},\"updates\":{\"dnTemplate\":\"ou=updates,dc=openidm,dc=example,dc=com\"}}},\"rest2LdapOptions\":{\"mvccAttribute\":\"etag\",\"readOnUpdatePolicy\":\"controls\",\"returnNullForMissingProperties\":true,\"useMvcc\":true,\"usePermissiveModify\":true,\"useSubtreeDelete\":true},\"security\":{\"keyManager\":\"jvm\",\"trustManager\":\"jvm\"}},{\"_id\":\"router\",\"filters\":[]},{\"_id\":\"script\",\"ECMAScript\":{\"#javascript.debug\":\"&{openidm.script.javascript.debug}\",\"javascript.recompile.minimumInterval\":60000},\"Groovy\":{\"#groovy.disabled.global.ast.transformations\":\"\",\"#groovy.errors.tolerance\":10,\"#groovy.output.debug\":false,\"#groovy.output.verbose\":false,\"#groovy.script.base\":\"#any class extends groovy.lang.Script\",\"#groovy.script.extension\":\".groovy\",\"#groovy.source.encoding\":\"utf-8 #default US-ASCII\",\"#groovy.target.bytecode\":\"1.5\",\"#groovy.target.indy\":true,\"#groovy.warnings\":\"likely errors #othere values [none,likely,possible,paranoia]\",\"groovy.classpath\":\"&{idm.install.dir}/lib\",\"groovy.recompile\":true,\"groovy.recompile.minimumInterval\":60000,\"groovy.source.encoding\":\"UTF-8\",\"groovy.target.directory\":\"&{idm.install.dir}/classes\"},\"properties\":{},\"sources\":{\"default\":{\"directory\":\"&{idm.install.dir}/bin/defaults/script\"},\"install\":{\"directory\":\"&{idm.install.dir}\"},\"project\":{\"directory\":\"&{idm.instance.dir}\"},\"project-script\":{\"directory\":\"&{idm.instance.dir}/script\"}}},{\"_id\":\"secrets\",\"populateDefaults\":true,\"stores\":[{\"class\":\"org.forgerock.openidm.secrets.config.FileBasedStore\",\"config\":{\"file\":\"&{openidm.keystore.location|&{idm.install.dir}/security/keystore.jceks}\",\"mappings\":[{\"aliases\":[\"&{openidm.config.crypto.alias|openidm-sym-default}\",\"openidm-localhost\"],\"secretId\":\"idm.default\",\"types\":[\"ENCRYPT\",\"DECRYPT\"]},{\"aliases\":[\"&{openidm.config.crypto.alias|openidm-sym-default}\"],\"secretId\":\"idm.config.encryption\",\"types\":[\"ENCRYPT\",\"DECRYPT\"]},{\"aliases\":[\"&{openidm.config.crypto.alias|openidm-sym-default}\"],\"secretId\":\"idm.password.encryption\",\"types\":[\"ENCRYPT\",\"DECRYPT\"]},{\"aliases\":[\"&{openidm.https.keystore.cert.alias|openidm-localhost}\"],\"secretId\":\"idm.jwt.session.module.encryption\",\"types\":[\"ENCRYPT\",\"DECRYPT\"]},{\"aliases\":[\"&{openidm.config.crypto.jwtsession.hmackey.alias|openidm-jwtsessionhmac-key}\"],\"secretId\":\"idm.jwt.session.module.signing\",\"types\":[\"SIGN\",\"VERIFY\"]},{\"aliases\":[\"selfservice\"],\"secretId\":\"idm.selfservice.encryption\",\"types\":[\"ENCRYPT\",\"DECRYPT\"]},{\"aliases\":[\"&{openidm.config.crypto.selfservice.sharedkey.alias|openidm-selfservice-key}\"],\"secretId\":\"idm.selfservice.signing\",\"types\":[\"SIGN\",\"VERIFY\"]},{\"aliases\":[\"&{openidm.config.crypto.alias|openidm-sym-default}\"],\"secretId\":\"idm.assignment.attribute.encryption\",\"types\":[\"ENCRYPT\",\"DECRYPT\"]}],\"providerName\":\"&{openidm.keystore.provider|SunJCE}\",\"storePassword\":\"&{openidm.keystore.password|changeit}\",\"storetype\":\"&{openidm.keystore.type|JCEKS}\"},\"name\":\"mainKeyStore\"},{\"class\":\"org.forgerock.openidm.secrets.config.FileBasedStore\",\"config\":{\"file\":\"&{openidm.truststore.location|&{idm.install.dir}/security/truststore}\",\"mappings\":[],\"providerName\":\"&{openidm.truststore.provider|SUN}\",\"storePassword\":\"&{openidm.truststore.password|changeit}\",\"storetype\":\"&{openidm.truststore.type|JKS}\"},\"name\":\"mainTrustStore\"}]},{\"_id\":\"selfservice.kba\",\"kbaPropertyName\":\"kbaInfo\",\"minimumAnswersToDefine\":1,\"minimumAnswersToVerify\":1,\"questions\":{\"1\":{\"en\":\"What's your favorite color?\"}}},{\"_id\":\"selfservice.terms\",\"active\":\"0.0\",\"uiConfig\":{\"buttonText\":\"Accept\",\"displayName\":\"We've updated our terms\",\"purpose\":\"You must accept the updated terms in order to proceed.\"},\"versions\":[{\"createDate\":\"2019-10-28T04:20:11.320Z\",\"termsTranslations\":{\"en\":\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"},\"version\":\"0.0\"}]},{\"_id\":\"servletfilter/cors\",\"initParams\":{\"allowCredentials\":false,\"allowedHeaders\":\"authorization,accept,content-type,origin,x-requested-with,cache-control,accept-api-version,if-match,if-none-match\",\"allowedMethods\":\"GET,POST,PUT,DELETE,PATCH\",\"allowedOrigins\":\"*\",\"chainPreflight\":false,\"exposedHeaders\":\"WWW-Authenticate\"},\"urlPatterns\":[\"/*\"]},{\"_id\":\"servletfilter/payload\",\"initParams\":{\"maxRequestSizeInMegabytes\":5},\"urlPatterns\":[\"&{openidm.servlet.alias}/*\"]},{\"_id\":\"servletfilter/upload\",\"initParams\":{\"maxRequestSizeInMegabytes\":50},\"urlPatterns\":[\"&{openidm.servlet.upload.alias}/*\"]},{\"_id\":\"sync\",\"mappings\":[{\"_id\":\"sync/managedBravo_user_managedBravo_user\",\"consentRequired\":false,\"displayName\":\"managedBravo_user_managedBravo_user\",\"icon\":null,\"name\":\"managedBravo_user_managedBravo_user\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/bravo_user\",\"syncAfter\":[],\"target\":\"managed/bravo_user\"},{\"_id\":\"sync/managedAlpha_user_managedBravo_user\",\"consentRequired\":true,\"displayName\":\"Test Mapping for Frodo\",\"icon\":null,\"name\":\"managedAlpha_user_managedBravo_user\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[{\"condition\":{\"globals\":{},\"source\":\"console.log(\\\"Hello World!\\\");\",\"type\":\"text/javascript\"},\"default\":[\"Default value string\"],\"source\":\"accountStatus\",\"target\":\"applications\",\"transform\":{\"globals\":{},\"source\":\"console.log(\\\"hello\\\");\",\"type\":\"text/javascript\"}}],\"source\":\"managed/alpha_user\",\"syncAfter\":[\"managedBravo_user_managedBravo_user\"],\"target\":\"managed/bravo_user\"},{\"_id\":\"sync/managedBravo_user_managedAlpha_user\",\"consentRequired\":false,\"displayName\":\"Frodo test mapping\",\"icon\":null,\"name\":\"managedBravo_user_managedAlpha_user\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/bravo_user\",\"syncAfter\":[\"managedBravo_user_managedBravo_user\",\"managedAlpha_user_managedBravo_user\"],\"target\":\"managed/alpha_user\"},{\"_id\":\"sync/AlphaUser2GoogleApps\",\"consentRequired\":false,\"correlationQuery\":[{\"expressionTree\":{\"all\":[\"__NAME__\"]},\"file\":\"ui/correlateTreeToQueryFilter.js\",\"linkQualifier\":\"default\",\"mapping\":\"AlphaUser2GoogleApps\",\"type\":\"text/javascript\"}],\"displayName\":\"AlphaUser2GoogleApps\",\"enableSync\":{\"$bool\":\"&{esv.gac.enable.mapping}\"},\"icon\":null,\"name\":\"AlphaUser2GoogleApps\",\"onCreate\":{\"globals\":{},\"source\":\"target.orgUnitPath = \\\"/NewAccounts\\\";\",\"type\":\"text/javascript\"},\"onUpdate\":{\"globals\":{},\"source\":\"//testing1234\\ntarget.givenName = oldTarget.givenName;\\ntarget.familyName = oldTarget.familyName;\\ntarget.__NAME__ = oldTarget.__NAME__;\",\"type\":\"text/javascript\"},\"policies\":[{\"action\":\"EXCEPTION\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"UNLINK\",\"situation\":\"SOURCE_MISSING\"},{\"action\":{\"globals\":{},\"source\":\"// Timing Constants\\nvar ATTEMPT = 6; // Number of attempts to find the Google user.\\nvar SLEEP_TIME = 500; // Milliseconds between retries.\\nvar SYSTEM_ENDPOINT = \\\"system/GoogleApps/__ACCOUNT__\\\";\\nvar MAPPING_NAME = \\\"AlphaUser2GoogleApps\\\";\\nvar GOOGLE_DOMAIN = identityServer.getProperty(\\\"esv.gac.domain\\\");\\nvar googleEmail = source.userName + \\\"@\\\" + GOOGLE_DOMAIN;\\nvar frUserGUID = source._id;\\nvar resultingAction = \\\"ASYNC\\\";\\n\\n// Get the Google GUID\\nvar linkQueryParams = {'_queryFilter': 'firstId eq \\\"' + frUserGUID + '\\\" and linkType eq \\\"' + MAPPING_NAME + '\\\"'};\\nvar linkResults = openidm.query(\\\"repo/link/\\\", linkQueryParams, null);\\nvar googleGUID;\\n\\nif (linkResults.resultCount === 1) {\\n googleGUID = linkResults.result[0].secondId;\\n}\\n\\nvar queryResults; // Resulting query from looking for the Google user.\\nvar params = {'_queryFilter': '__UID__ eq \\\"' + googleGUID + '\\\"'};\\n\\nfor (var i = 1; i <= ATTEMPT; i++) {\\n queryResults = openidm.query(SYSTEM_ENDPOINT, params);\\n if (queryResults.result && queryResults.result.length > 0) {\\n logger.info(\\\"idmlog: ---AlphaUser2GoogleApps - Missing->UPDATE - Result found in \\\" + i + \\\" attempts. Query result: \\\" + JSON.stringify(queryResults));\\n resultingAction = \\\"UPDATE\\\";\\n break;\\n }\\n java.lang.Thread.sleep(SLEEP_TIME); // Wait before trying again.\\n}\\n\\nif (!queryResults.result || queryResults.resultCount === 0) {\\n logger.warn(\\\"idmlog: ---AlphaUser2GoogleApps - Missing->UNLINK - \\\" + googleEmail + \\\" not found after \\\" + ATTEMPT + \\\" attempts.\\\");\\n resultingAction = \\\"UNLINK\\\";\\n}\\nresultingAction;\\n\",\"type\":\"text/javascript\"},\"situation\":\"MISSING\"},{\"action\":\"EXCEPTION\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"IGNORE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"IGNORE\",\"situation\":\"UNASSIGNED\"},{\"action\":\"UNLINK\",\"situation\":\"LINK_ONLY\"},{\"action\":\"IGNORE\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"LINK\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"}],\"properties\":[{\"condition\":{\"globals\":{},\"source\":\"object.custom_password_encrypted != null\",\"type\":\"text/javascript\"},\"source\":\"custom_password_encrypted\",\"target\":\"__PASSWORD__\",\"transform\":{\"globals\":{},\"source\":\"openidm.decrypt(source);\",\"type\":\"text/javascript\"}},{\"source\":\"cn\",\"target\":\"__NAME__\",\"transform\":{\"globals\":{},\"source\":\"source + \\\"@\\\" + identityServer.getProperty(\\\"esv.gac.domain\\\");\",\"type\":\"text/javascript\"}},{\"source\":\"givenName\",\"target\":\"givenName\"},{\"source\":\"\",\"target\":\"familyName\",\"transform\":{\"globals\":{},\"source\":\"if (source.frIndexedInteger1 > 2 && source.frIndexedInteger1 < 6) {\\n source.sn + \\\" (Student)\\\"\\n} else {\\n source.sn\\n}\",\"type\":\"text/javascript\"}}],\"queuedSync\":{\"enabled\":true,\"maxQueueSize\":20000,\"maxRetries\":5,\"pageSize\":100,\"pollingInterval\":1000,\"postRetryAction\":\"logged-ignore\",\"retryDelay\":1000},\"source\":\"managed/alpha_user\",\"syncAfter\":[\"managedBravo_user_managedBravo_user\",\"managedAlpha_application_managedBravo_application\",\"managedAlpha_user_managedBravo_user\",\"managedBravo_user_managedAlpha_user\"],\"target\":\"system/GoogleApps/__ACCOUNT__\",\"validSource\":{\"globals\":{},\"source\":\"var isGoogleEligible = true;\\n//var logMsg = \\\"idmlog: ---AplhaUser2GAC (username: \\\" + source.userName + \\\" - userType: \\\" + source.frIndexedInteger1 + \\\" cn: \\\" + source.cn + \\\") -\\\";\\nvar logMsg = \\\"idmlog: ---AplhaUser2GAC (username: \\\" + source.userName + \\\" - userType: \\\" + source.frIndexedInteger1 + \\\") -\\\";\\n\\n//Get Applicable userTypes (no Parent accounts)\\nif (source.frIndexedInteger1 !== 0 && source.frIndexedInteger1 !== 1 && source.frIndexedInteger1 !== 3 && source.frIndexedInteger1 !== 4 && source.frIndexedInteger1 !== 5) {\\n\\tisGoogleEligible = false;\\n\\tlogMsg = logMsg + \\\" Account type not eligible.\\\";\\n}\\n\\n//Make sure the account has a valid encrypted password.\\nif (source.custom_password_encrypted == undefined || source.custom_password_encrypted == null) {\\n\\tisGoogleEligible = false;\\n\\tlogMsg = logMsg + \\\" No encrypted password yet.\\\";\\n}\\n\\n//Check that CN exists and has no space.\\nif (source.cn && source.cn.includes(' ')) {\\n\\tisGoogleEligible = false;\\n\\tlogMsg = logMsg + \\\" CN with a space is not allowed.\\\";\\n}\\n\\nif (!isGoogleEligible) {\\n\\tlogMsg = logMsg + \\\" Not sent to Google.\\\"\\n\\tlogger.info(logMsg);\\n} \\n\\nif (isGoogleEligible) {\\n\\tlogMsg = logMsg + \\\" Sent to Google.\\\"\\n\\tlogger.info(logMsg);\\n}\\n\\nisGoogleEligible;\\n\",\"type\":\"text/javascript\"}}]},{\"_id\":\"ui.context/admin\",\"defaultDir\":\"&{idm.install.dir}/ui/admin/default\",\"enabled\":true,\"extensionDir\":\"&{idm.install.dir}/ui/admin/extension\",\"responseHeaders\":{\"X-Frame-Options\":\"SAMEORIGIN\"},\"urlContextRoot\":\"/admin\"},{\"_id\":\"ui.context/api\",\"authEnabled\":true,\"cacheEnabled\":false,\"defaultDir\":\"&{idm.install.dir}/ui/api/default\",\"enabled\":true,\"extensionDir\":\"&{idm.install.dir}/ui/api/extension\",\"urlContextRoot\":\"/api\"},{\"_id\":\"ui.context/enduser\",\"defaultDir\":\"&{idm.install.dir}/ui/enduser\",\"enabled\":true,\"responseHeaders\":{\"X-Frame-Options\":\"DENY\"},\"urlContextRoot\":\"/\"},{\"_id\":\"ui.context/oauth\",\"cacheEnabled\":true,\"defaultDir\":\"&{idm.install.dir}/ui/oauth/default\",\"enabled\":true,\"extensionDir\":\"&{idm.install.dir}/ui/oauth/extension\",\"urlContextRoot\":\"/oauthReturn\"},{\"_id\":\"ui/configuration\",\"configuration\":{\"defaultNotificationType\":\"info\",\"forgotUsername\":false,\"lang\":\"en\",\"notificationTypes\":{\"error\":{\"iconPath\":\"images/notifications/error.png\",\"name\":\"common.notification.types.error\"},\"info\":{\"iconPath\":\"images/notifications/info.png\",\"name\":\"common.notification.types.info\"},\"warning\":{\"iconPath\":\"images/notifications/warning.png\",\"name\":\"common.notification.types.warning\"}},\"passwordReset\":true,\"passwordResetLink\":\"\",\"platformSettings\":{\"adminOauthClient\":\"idmAdminClient\",\"adminOauthClientScopes\":\"fr:idm:*\",\"amUrl\":\"/am\",\"loginUrl\":\"\"},\"roles\":{\"internal/role/openidm-admin\":\"ui-admin\",\"internal/role/openidm-authorized\":\"ui-user\"},\"selfRegistration\":true}},{\"_id\":\"ui/dashboard\",\"adminDashboards\":[{\"isDefault\":true,\"name\":\"Quick Start\",\"widgets\":[{\"cards\":[{\"href\":\"#resource/managed/alpha_user/list/\",\"icon\":\"fa-user\",\"name\":\"Manage Users\"},{\"href\":\"#resource/managed/alpha_role/list/\",\"icon\":\"fa-check-square-o\",\"name\":\"Manage Roles\"},{\"href\":\"#connectors/add/\",\"icon\":\"fa-database\",\"name\":\"Add Connector\"},{\"href\":\"#mapping/add/\",\"icon\":\"fa-map-marker\",\"name\":\"Create Mapping\"},{\"href\":\"#managed/add/\",\"icon\":\"fa-tablet\",\"name\":\"Add Device\"},{\"href\":\"#settings/\",\"icon\":\"fa-user\",\"name\":\"Configure System Preferences\"}],\"size\":\"large\",\"type\":\"quickStart\"}]},{\"isDefault\":false,\"name\":\"System Monitoring\",\"widgets\":[{\"legendRange\":{\"month\":[500,2500,5000],\"week\":[10,30,90,270,810],\"year\":[10000,40000,100000,250000]},\"maxRange\":\"#24423c\",\"minRange\":\"#b0d4cd\",\"size\":\"large\",\"type\":\"audit\"},{\"size\":\"large\",\"type\":\"clusterStatus\"},{\"size\":\"large\",\"type\":\"systemHealthFull\"},{\"barchart\":\"false\",\"size\":\"large\",\"type\":\"lastRecon\"}]},{\"isDefault\":false,\"name\":\"Resource Report\",\"widgets\":[{\"selected\":\"activeUsers\",\"size\":\"x-small\",\"type\":\"counter\"},{\"selected\":\"rolesEnabled\",\"size\":\"x-small\",\"type\":\"counter\"},{\"selected\":\"activeConnectors\",\"size\":\"x-small\",\"type\":\"counter\"},{\"size\":\"large\",\"type\":\"resourceList\"}]},{\"isDefault\":false,\"name\":\"Business Report\",\"widgets\":[{\"graphType\":\"fa-pie-chart\",\"providers\":[\"Username/Password\"],\"size\":\"x-small\",\"type\":\"signIns\",\"widgetTitle\":\"Sign-Ins\"},{\"graphType\":\"fa-bar-chart\",\"size\":\"x-small\",\"type\":\"passwordResets\",\"widgetTitle\":\"Password Resets\"},{\"graphType\":\"fa-line-chart\",\"providers\":[\"Username/Password\"],\"size\":\"x-small\",\"type\":\"newRegistrations\",\"widgetTitle\":\"New Registrations\"},{\"size\":\"x-small\",\"timezone\":{\"hours\":\"07\",\"minutes\":\"00\",\"negative\":true},\"type\":\"socialLogin\"},{\"selected\":\"socialEnabled\",\"size\":\"x-small\",\"type\":\"counter\"},{\"selected\":\"manualRegistrations\",\"size\":\"x-small\",\"type\":\"counter\"}]}],\"dashboard\":{\"widgets\":[{\"size\":\"large\",\"type\":\"Welcome\"}]}},{\"_id\":\"ui/profile\",\"tabs\":[{\"name\":\"personalInfoTab\",\"view\":\"org/forgerock/openidm/ui/user/profile/personalInfo/PersonalInfoTab\"},{\"name\":\"signInAndSecurity\",\"view\":\"org/forgerock/openidm/ui/user/profile/signInAndSecurity/SignInAndSecurityTab\"},{\"name\":\"preference\",\"view\":\"org/forgerock/openidm/ui/user/profile/PreferencesTab\"},{\"name\":\"trustedDevice\",\"view\":\"org/forgerock/openidm/ui/user/profile/TrustedDevicesTab\"},{\"name\":\"oauthApplication\",\"view\":\"org/forgerock/openidm/ui/user/profile/OauthApplicationsTab\"},{\"name\":\"privacyAndConsent\",\"view\":\"org/forgerock/openidm/ui/user/profile/PrivacyAndConsentTab\"},{\"name\":\"sharing\",\"view\":\"org/forgerock/openidm/ui/user/profile/uma/SharingTab\"},{\"name\":\"auditHistory\",\"view\":\"org/forgerock/openidm/ui/user/profile/uma/ActivityTab\"},{\"name\":\"accountControls\",\"view\":\"org/forgerock/openidm/ui/user/profile/accountControls/AccountControlsTab\"}]},{\"_id\":\"ui/themeconfig\",\"icon\":\"favicon.ico\",\"path\":\"\",\"settings\":{\"footer\":{\"mailto\":\"info@forgerock.com\"},\"loginLogo\":{\"alt\":\"ForgeRock\",\"height\":\"104px\",\"src\":\"images/login-logo-dark.png\",\"title\":\"ForgeRock\",\"width\":\"210px\"},\"logo\":{\"alt\":\"ForgeRock\",\"src\":\"images/logo-horizontal-white.png\",\"title\":\"ForgeRock\"}},\"stylesheets\":[\"css/bootstrap-3.4.1-custom.css\",\"css/structure.css\",\"css/theme.css\"]},{\"_id\":\"ui/themerealm\",\"realm\":{\"/alpha\":[{\"_id\":\"4ded6d91-ceea-400a-ae3f-42209f1b0e06\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"
\\n

Uptime & Performance Benchmarking Made Easy

\\n
\\n\\n\",\"journeyJustifiedContentEnabled\":true,\"journeyLayout\":\"justified-right\",\"journeyTheaterMode\":true,\"linkActiveColor\":\"#007661\",\"linkColor\":\"#009C80\",\"linkedTrees\":[],\"logo\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoAltText\":\"Zardoz Logo\",\"logoEnabled\":true,\"logoHeight\":\"47\",\"logoProfile\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileAltText\":\"Zardaz Logo\",\"logoProfileCollapsed\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileCollapsedAltText\":\"Zardaz Logo\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"40\",\"name\":\"Zardoz\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#009C80\",\"primaryOffColor\":\"#007661\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#009C80\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"}],\"alpha\":[{\"_id\":\"cd6c93e2-52e2-4340-9770-66a588343841\",\"accountFooter\":\"\",\"accountFooterEnabled\":false,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#000000\",\"buttonRounded\":\"0\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\",\"journeyFooterEnabled\":false,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#000000\",\"linkColor\":\"#000000\",\"linkedTrees\":[],\"logo\":\"https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg\",\"logoAltText\":\"Contrast\",\"logoEnabled\":true,\"logoHeight\":\"72\",\"logoProfile\":\"data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A\",\"logoProfileAltText\":\"Contrast\",\"logoProfileCollapsed\":\"data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A\",\"logoProfileCollapsedAltText\":\"\",\"logoProfileCollapsedHeight\":\"22\",\"logoProfileHeight\":\"22\",\"name\":\"Contrast\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#000000\",\"primaryOffColor\":\"#000000\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#000000\",\"profileMenuTextHighlightColor\":\"#455469\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"e47838b5-48c9-4dea-8a84-43f4b4ea8e04\",\"accountCardBackgroundColor\":\"#ffffff\",\"accountCardHeaderColor\":\"#23282e\",\"accountCardInnerBorderColor\":\"#e7eef4\",\"accountCardInputBackgroundColor\":\"#ffffff\",\"accountCardInputBorderColor\":\"#c0c9d5\",\"accountCardInputLabelColor\":\"#5e6d82\",\"accountCardInputSelectColor\":\"#e4f4fd\",\"accountCardInputSelectHoverColor\":\"#f6f8fa\",\"accountCardInputTextColor\":\"#23282e\",\"accountCardOuterBorderColor\":\"#e7eef4\",\"accountCardShadow\":3,\"accountCardTabActiveBorderColor\":\"#109cf1\",\"accountCardTabActiveColor\":\"#e4f4fd\",\"accountCardTextColor\":\"#5e6d82\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountFooterScriptTag\":\"\",\"accountFooterScriptTagEnabled\":false,\"accountNavigationBackgroundColor\":\"#ffffff\",\"accountNavigationTextColor\":\"#455469\",\"accountNavigationToggleBorderColor\":\"#e7eef4\",\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"accountTableRowHoverColor\":\"#f6f8fa\",\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"boldLinks\":false,\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"fontFamily\":\"Open Sans\",\"isDefault\":false,\"journeyA11yAddFallbackErrorHeading\":true,\"journeyCardBackgroundColor\":\"#ffffff\",\"journeyCardBorderRadius\":4,\"journeyCardHeaderBackgroundColor\":\"#ffffff\",\"journeyCardShadow\":3,\"journeyCardTextColor\":\"#5e6d82\",\"journeyCardTitleColor\":\"#23282e\",\"journeyFloatingLabels\":true,\"journeyFocusElement\":\"header\",\"journeyFocusFirstFocusableItemEnabled\":false,\"journeyFooter\":\"\\n\",\"journeyFooterEnabled\":true,\"journeyFooterScriptTag\":\"\",\"journeyFooterScriptTagEnabled\":false,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyHeaderSkipLinkEnabled\":false,\"journeyInputBackgroundColor\":\"#ffffff\",\"journeyInputBorderColor\":\"#c0c9d5\",\"journeyInputLabelColor\":\"#5e6d82\",\"journeyInputSelectColor\":\"#e4f4fd\",\"journeyInputSelectHoverColor\":\"#f6f8fa\",\"journeyInputTextColor\":\"#23282e\",\"journeyJustifiedContent\":\"
\\n

Uptime & Performance Benchmarking Made Easy

\\n
\\n\\n\",\"journeyJustifiedContentEnabled\":true,\"journeyJustifiedContentMobileViewEnabled\":false,\"journeyLayout\":\"justified-right\",\"journeyRememberMeEnabled\":false,\"journeyRememberMeLabel\":\"\",\"journeySignInButtonPosition\":\"flex-column\",\"journeyTheaterMode\":true,\"linkActiveColor\":\"#007661\",\"linkColor\":\"#009C80\",\"linkedTrees\":[],\"logo\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoAltText\":\"Zardoz Logo\",\"logoEnabled\":true,\"logoHeight\":\"47\",\"logoProfile\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileAltText\":\"Zardaz Logo\",\"logoProfileCollapsed\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileCollapsedAltText\":\"Zardaz Logo\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"40\",\"name\":\"Copy of Zardoz\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#009C80\",\"primaryOffColor\":\"#007661\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#009C80\",\"secondaryColor\":\"#69788b\",\"successColor\":\"#2ed47a\",\"switchBackgroundColor\":\"#c0c9d5\",\"textColor\":\"#ffffff\",\"topBarBackgroundColor\":\"#ffffff\",\"topBarBorderColor\":\"#e7eef4\",\"topBarHeaderColor\":\"#23282e\",\"topBarTextColor\":\"#69788b\"},{\"_id\":\"00203891-dde0-4114-b27a-219ae0b43a61\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
\\n \\n \\n \\n \\n \\n
    \\n
  • \\n Link\\n
  • \\n
  • \\n Disabled\\n
  • \\n
\\n
    \\n
  • \\n Link\\n
  • \\n
\\n \\n \\n
\\n\",\"journeyHeaderEnabled\":true,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#C60819\",\"linkColor\":\"#EB0A1E\",\"linkedTrees\":[],\"logo\":\"\",\"logoAltText\":\"\",\"logoEnabled\":true,\"logoHeight\":\"40\",\"logoProfile\":\"https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-full.svg\",\"logoProfileAltText\":\"Highlander\",\"logoProfileCollapsed\":\"https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-icon.svg\",\"logoProfileCollapsedAltText\":\"Highlander\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"28\",\"name\":\"Highlander\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#EB0A1E\",\"primaryOffColor\":\"#C60819\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#EB0A1E\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"63e19668-909f-479e-83d7-be7a01cd8187\",\"accountCardBackgroundColor\":\"#ffffff\",\"accountCardHeaderColor\":\"#23282e\",\"accountCardInnerBorderColor\":\"#e7eef4\",\"accountCardInputBackgroundColor\":\"#ffffff\",\"accountCardInputBorderColor\":\"#c0c9d5\",\"accountCardInputLabelColor\":\"#5e6d82\",\"accountCardInputSelectColor\":\"#e4f4fd\",\"accountCardInputTextColor\":\"#23282e\",\"accountCardOuterBorderColor\":\"#e7eef4\",\"accountCardShadow\":3,\"accountCardTabActiveBorderColor\":\"#109cf1\",\"accountCardTabActiveColor\":\"#e4f4fd\",\"accountCardTextColor\":\"#5e6d82\",\"accountFooter\":\"\",\"accountFooterEnabled\":false,\"accountNavigationBackgroundColor\":\"#ffffff\",\"accountNavigationTextColor\":\"#455469\",\"accountNavigationToggleBorderColor\":\"#e7eef4\",\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":true},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"accountTableRowHoverColor\":\"#f6f8fa\",\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#000000\",\"boldLinks\":false,\"buttonRounded\":\"0\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"fontFamily\":\"Open Sans\",\"isDefault\":false,\"journeyCardBackgroundColor\":\"#ffffff\",\"journeyCardShadow\":3,\"journeyCardTextColor\":\"#5e6d82\",\"journeyCardTitleColor\":\"#23282e\",\"journeyFooter\":\"\",\"journeyFooterEnabled\":false,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyInputBackgroundColor\":\"#ffffff\",\"journeyInputBorderColor\":\"#c0c9d5\",\"journeyInputLabelColor\":\"#5e6d82\",\"journeyInputSelectColor\":\"#e4f4fd\",\"journeyInputTextColor\":\"#23282e\",\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#000000\",\"linkColor\":\"#000000\",\"linkedTrees\":[\"FrodoTest\",\"AA-FrodoTest\"],\"logo\":\"https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg\",\"logoAltText\":\"Contrast\",\"logoEnabled\":false,\"logoHeight\":\"72\",\"logoProfile\":\"data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A\",\"logoProfileAltText\":\"Contrast\",\"logoProfileCollapsed\":\"data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A\",\"logoProfileCollapsedAltText\":\"\",\"logoProfileCollapsedHeight\":\"22\",\"logoProfileHeight\":\"22\",\"name\":\"NoAccess\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#000000\",\"primaryOffColor\":\"#000000\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#000000\",\"profileMenuTextHighlightColor\":\"#455469\",\"secondaryColor\":\"#69788b\",\"switchBackgroundColor\":\"#c0c9d5\",\"textColor\":\"#ffffff\",\"topBarBackgroundColor\":\"#ffffff\",\"topBarBorderColor\":\"#e7eef4\",\"topBarHeaderColor\":\"#23282e\",\"topBarTextColor\":\"#69788b\"},{\"_id\":\"b82755e8-fe9a-4d27-b66b-45e37ae12345\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
\\n \\n \\n \\n \\n \\n
    \\n
  • \\n Link\\n
  • \\n
  • \\n Disabled\\n
  • \\n
\\n
    \\n
  • \\n Link\\n
  • \\n
\\n \\n \\n
\\n\",\"journeyHeaderEnabled\":true,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":true,\"journeyLayout\":\"justified-right\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#49871E\",\"linkColor\":\"#5AA625\",\"linkedTrees\":[],\"logo\":\"\",\"logoAltText\":\"\",\"logoEnabled\":true,\"logoHeight\":\"40\",\"logoProfile\":\"data:image/svg+xml,%0A%3Csvg width='156' height='34' viewBox='0 0 156 34' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445995 0.446289 0.445995 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cpath d='M51.053 25.38L53.186 25.11V8.964L51.161 8.586V6.939H55.076C55.418 6.939 55.796 6.93 56.21 6.912C56.624 6.894 56.939 6.876 57.155 6.858C58.091 6.786 58.865 6.75 59.477 6.75C61.331 6.75 62.816 6.939 63.932 7.317C65.048 7.695 65.858 8.271 66.362 9.045C66.866 9.819 67.118 10.836 67.118 12.096C67.118 13.338 66.785 14.49 66.119 15.552C65.453 16.614 64.49 17.343 63.23 17.739C63.95 18.045 64.589 18.603 65.147 19.413C65.705 20.223 66.299 21.276 66.929 22.572C67.379 23.454 67.721 24.093 67.955 24.489C68.207 24.867 68.45 25.083 68.684 25.137L69.575 25.407V27H64.985C64.697 27 64.391 26.712 64.067 26.136C63.761 25.542 63.356 24.615 62.852 23.355C62.258 21.879 61.745 20.727 61.313 19.899C60.881 19.071 60.422 18.558 59.936 18.36H57.155V25.11L59.639 25.38V27H51.053V25.38ZM59.639 16.713C60.665 16.713 61.466 16.344 62.042 15.606C62.618 14.868 62.906 13.761 62.906 12.285C62.906 10.971 62.618 9.999 62.042 9.369C61.484 8.739 60.512 8.424 59.126 8.424C58.622 8.424 58.19 8.451 57.83 8.505C57.488 8.541 57.263 8.559 57.155 8.559V16.659C57.371 16.695 57.893 16.713 58.721 16.713H59.639ZM70.674 19.521C70.674 17.829 71.007 16.389 71.673 15.201C72.357 14.013 73.266 13.122 74.4 12.528C75.534 11.916 76.767 11.61 78.099 11.61C80.367 11.61 82.113 12.312 83.337 13.716C84.579 15.102 85.2 16.992 85.2 19.386C85.2 21.096 84.858 22.554 84.174 23.76C83.508 24.948 82.608 25.839 81.474 26.433C80.358 27.009 79.125 27.297 77.775 27.297C75.525 27.297 73.779 26.604 72.537 25.218C71.295 23.814 70.674 21.915 70.674 19.521ZM77.991 25.542C80.025 25.542 81.042 23.58 81.042 19.656C81.042 17.604 80.799 16.047 80.313 14.985C79.827 13.905 79.035 13.365 77.937 13.365C75.849 13.365 74.805 15.327 74.805 19.251C74.805 21.303 75.057 22.869 75.561 23.949C76.083 25.011 76.893 25.542 77.991 25.542ZM86.4395 5.454L91.3805 4.86H91.4345L92.1905 5.373V13.338C92.6765 12.852 93.2705 12.447 93.9725 12.123C94.6925 11.781 95.4665 11.61 96.2945 11.61C98.0225 11.61 99.4265 12.222 100.506 13.446C101.604 14.652 102.153 16.506 102.153 19.008C102.153 20.556 101.829 21.96 101.181 23.22C100.533 24.48 99.5975 25.479 98.3735 26.217C97.1675 26.937 95.7635 27.297 94.1615 27.297C92.7395 27.297 91.5065 27.18 90.4625 26.946C89.4185 26.694 88.7525 26.469 88.4645 26.271V7.182L86.4395 6.858V5.454ZM94.8635 13.986C94.3235 13.986 93.8105 14.112 93.3245 14.364C92.8565 14.598 92.4785 14.868 92.1905 15.174V25.029C92.2985 25.227 92.5505 25.389 92.9465 25.515C93.3425 25.641 93.7925 25.704 94.2965 25.704C95.4485 25.704 96.3665 25.173 97.0505 24.111C97.7525 23.031 98.1035 21.438 98.1035 19.332C98.1035 17.514 97.8065 16.173 97.2125 15.309C96.6185 14.427 95.8355 13.986 94.8635 13.986Z' fill='black'/%3E%3Cpath d='M104.183 25.38L106.316 25.11V8.964L104.291 8.586V6.939H108.206C108.548 6.939 108.926 6.93 109.34 6.912C109.754 6.894 110.069 6.876 110.285 6.858C111.221 6.786 111.995 6.75 112.607 6.75C114.461 6.75 115.946 6.939 117.062 7.317C118.178 7.695 118.988 8.271 119.492 9.045C119.996 9.819 120.248 10.836 120.248 12.096C120.248 13.338 119.915 14.49 119.249 15.552C118.583 16.614 117.62 17.343 116.36 17.739C117.08 18.045 117.719 18.603 118.277 19.413C118.835 20.223 119.429 21.276 120.059 22.572C120.509 23.454 120.851 24.093 121.085 24.489C121.337 24.867 121.58 25.083 121.814 25.137L122.705 25.407V27H118.115C117.827 27 117.521 26.712 117.197 26.136C116.891 25.542 116.486 24.615 115.982 23.355C115.388 21.879 114.875 20.727 114.443 19.899C114.011 19.071 113.552 18.558 113.066 18.36H110.285V25.11L112.769 25.38V27H104.183V25.38ZM112.769 16.713C113.795 16.713 114.596 16.344 115.172 15.606C115.748 14.868 116.036 13.761 116.036 12.285C116.036 10.971 115.748 9.999 115.172 9.369C114.614 8.739 113.642 8.424 112.256 8.424C111.752 8.424 111.32 8.451 110.96 8.505C110.618 8.541 110.393 8.559 110.285 8.559V16.659C110.501 16.695 111.023 16.713 111.851 16.713H112.769ZM123.804 19.521C123.804 17.829 124.137 16.389 124.803 15.201C125.487 14.013 126.396 13.122 127.53 12.528C128.664 11.916 129.897 11.61 131.229 11.61C133.497 11.61 135.243 12.312 136.467 13.716C137.709 15.102 138.33 16.992 138.33 19.386C138.33 21.096 137.988 22.554 137.304 23.76C136.638 24.948 135.738 25.839 134.604 26.433C133.488 27.009 132.255 27.297 130.905 27.297C128.655 27.297 126.909 26.604 125.667 25.218C124.425 23.814 123.804 21.915 123.804 19.521ZM131.121 25.542C133.155 25.542 134.172 23.58 134.172 19.656C134.172 17.604 133.929 16.047 133.443 14.985C132.957 13.905 132.165 13.365 131.067 13.365C128.979 13.365 127.935 15.327 127.935 19.251C127.935 21.303 128.187 22.869 128.691 23.949C129.213 25.011 130.023 25.542 131.121 25.542ZM143.187 33.723C142.863 33.723 142.512 33.696 142.134 33.642C141.774 33.588 141.513 33.525 141.351 33.453V30.564C141.477 30.636 141.729 30.708 142.107 30.78C142.485 30.852 142.827 30.888 143.133 30.888C144.033 30.888 144.771 30.591 145.347 29.997C145.941 29.403 146.49 28.404 146.994 27H145.536L140.46 13.905L139.245 13.554V11.988H146.67V13.554L144.699 13.878L147.102 21.357L148.074 24.543L148.911 21.357L151.125 13.878L149.424 13.554V11.988H155.283V13.554L153.96 13.878C152.97 16.902 151.989 19.818 151.017 22.626C150.045 25.434 149.478 27.009 149.316 27.351C148.74 28.863 148.191 30.069 147.669 30.969C147.147 31.869 146.526 32.553 145.806 33.021C145.086 33.489 144.213 33.723 143.187 33.723Z' fill='%236CBE34'/%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\"logoProfileAltText\":\"RobRoy\",\"logoProfileCollapsed\":\"data:image/svg+xml,%0A%3Csvg width='33' height='33' viewBox='0 0 33 33' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445996 0.446289 0.445996 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\"logoProfileCollapsedAltText\":\"RobRoy\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"28\",\"name\":\"Robroy\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#5AA625\",\"primaryOffColor\":\"#49871E\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#5AA625\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"86ce2f64-586d-44fe-8593-b12a85aac68d\",\"accountFooter\":\"\",\"accountFooterEnabled\":false,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#324054\",\"backgroundImage\":\"\",\"bodyText\":\"#23282e\",\"buttonRounded\":5,\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":true,\"journeyFooter\":\"\",\"journeyFooterEnabled\":false,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#0c85cf\",\"linkColor\":\"#109cf1\",\"linkedTrees\":[],\"logo\":\"\",\"logoAltText\":\"\",\"logoHeight\":\"40\",\"logoProfile\":\"\",\"logoProfileAltText\":\"\",\"logoProfileCollapsed\":\"\",\"logoProfileCollapsedAltText\":\"\",\"logoProfileCollapsedHeight\":\"40\",\"logoProfileHeight\":\"40\",\"name\":\"Starter Theme\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#324054\",\"primaryOffColor\":\"#242E3C\",\"profileBackgroundColor\":\"#f6f8fa\",\"profileMenuHighlightColor\":\"#f3f5f8\",\"profileMenuHoverColor\":\"#324054\",\"profileMenuHoverTextColor\":\"#ffffff\",\"profileMenuTextHighlightColor\":\"#455469\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"4ded6d91-ceea-400a-ae3f-42209f1b0e06\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"
\\n

Uptime & Performance Benchmarking Made Easy

\\n
\\n\\n\",\"journeyJustifiedContentEnabled\":true,\"journeyLayout\":\"justified-right\",\"journeyTheaterMode\":true,\"linkActiveColor\":\"#007661\",\"linkColor\":\"#009C80\",\"linkedTrees\":[],\"logo\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoAltText\":\"Zardoz Logo\",\"logoEnabled\":true,\"logoHeight\":\"47\",\"logoProfile\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileAltText\":\"Zardaz Logo\",\"logoProfileCollapsed\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileCollapsedAltText\":\"Zardaz Logo\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"40\",\"name\":\"Zardoz\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#009C80\",\"primaryOffColor\":\"#007661\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#009C80\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"}],\"bravo\":[{\"_id\":\"00203891-dde0-4114-b27a-219ae0b43a61\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
\\n \\n \\n \\n \\n \\n
    \\n
  • \\n Link\\n
  • \\n
  • \\n Disabled\\n
  • \\n
\\n
    \\n
  • \\n Link\\n
  • \\n
\\n \\n \\n
\\n\",\"journeyHeaderEnabled\":true,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#C60819\",\"linkColor\":\"#EB0A1E\",\"linkedTrees\":[],\"logo\":\"\",\"logoAltText\":\"\",\"logoEnabled\":true,\"logoHeight\":\"40\",\"logoProfile\":\"https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-full.svg\",\"logoProfileAltText\":\"Highlander\",\"logoProfileCollapsed\":\"https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-icon.svg\",\"logoProfileCollapsedAltText\":\"Highlander\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"28\",\"name\":\"Highlander\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#EB0A1E\",\"primaryOffColor\":\"#C60819\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#EB0A1E\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"4ded6d91-ceea-400a-ae3f-42209f1b0e06\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"
\\n

Uptime & Performance Benchmarking Made Easy

\\n
\\n\\n\",\"journeyJustifiedContentEnabled\":true,\"journeyLayout\":\"justified-right\",\"journeyTheaterMode\":true,\"linkActiveColor\":\"#007661\",\"linkColor\":\"#009C80\",\"linkedTrees\":[],\"logo\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoAltText\":\"Zardoz Logo\",\"logoEnabled\":true,\"logoHeight\":\"47\",\"logoProfile\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileAltText\":\"Zardaz Logo\",\"logoProfileCollapsed\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileCollapsedAltText\":\"Zardaz Logo\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"40\",\"name\":\"Zardoz\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#009C80\",\"primaryOffColor\":\"#007661\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#009C80\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"86ce2f64-586d-44fe-8593-b12a85aac68d\",\"accountFooter\":\"\",\"accountFooterEnabled\":false,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#324054\",\"backgroundImage\":\"\",\"bodyText\":\"#23282e\",\"buttonRounded\":5,\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":true,\"journeyFooter\":\"\",\"journeyFooterEnabled\":false,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#0c85cf\",\"linkColor\":\"#109cf1\",\"linkedTrees\":[],\"logo\":\"\",\"logoAltText\":\"\",\"logoHeight\":\"40\",\"logoProfile\":\"\",\"logoProfileAltText\":\"\",\"logoProfileCollapsed\":\"\",\"logoProfileCollapsedAltText\":\"\",\"logoProfileCollapsedHeight\":\"40\",\"logoProfileHeight\":\"40\",\"name\":\"Starter Theme\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#324054\",\"primaryOffColor\":\"#242E3C\",\"profileBackgroundColor\":\"#f6f8fa\",\"profileMenuHighlightColor\":\"#f3f5f8\",\"profileMenuHoverColor\":\"#324054\",\"profileMenuHoverTextColor\":\"#ffffff\",\"profileMenuTextHighlightColor\":\"#455469\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"b82755e8-fe9a-4d27-b66b-45e37ae12345\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
\\n \\n \\n \\n \\n \\n
    \\n
  • \\n Link\\n
  • \\n
  • \\n Disabled\\n
  • \\n
\\n
    \\n
  • \\n Link\\n
  • \\n
\\n \\n \\n
\\n\",\"journeyHeaderEnabled\":true,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":true,\"journeyLayout\":\"justified-right\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#49871E\",\"linkColor\":\"#5AA625\",\"linkedTrees\":[],\"logo\":\"\",\"logoAltText\":\"\",\"logoEnabled\":true,\"logoHeight\":\"40\",\"logoProfile\":\"data:image/svg+xml,%0A%3Csvg width='156' height='34' viewBox='0 0 156 34' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445995 0.446289 0.445995 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cpath d='M51.053 25.38L53.186 25.11V8.964L51.161 8.586V6.939H55.076C55.418 6.939 55.796 6.93 56.21 6.912C56.624 6.894 56.939 6.876 57.155 6.858C58.091 6.786 58.865 6.75 59.477 6.75C61.331 6.75 62.816 6.939 63.932 7.317C65.048 7.695 65.858 8.271 66.362 9.045C66.866 9.819 67.118 10.836 67.118 12.096C67.118 13.338 66.785 14.49 66.119 15.552C65.453 16.614 64.49 17.343 63.23 17.739C63.95 18.045 64.589 18.603 65.147 19.413C65.705 20.223 66.299 21.276 66.929 22.572C67.379 23.454 67.721 24.093 67.955 24.489C68.207 24.867 68.45 25.083 68.684 25.137L69.575 25.407V27H64.985C64.697 27 64.391 26.712 64.067 26.136C63.761 25.542 63.356 24.615 62.852 23.355C62.258 21.879 61.745 20.727 61.313 19.899C60.881 19.071 60.422 18.558 59.936 18.36H57.155V25.11L59.639 25.38V27H51.053V25.38ZM59.639 16.713C60.665 16.713 61.466 16.344 62.042 15.606C62.618 14.868 62.906 13.761 62.906 12.285C62.906 10.971 62.618 9.999 62.042 9.369C61.484 8.739 60.512 8.424 59.126 8.424C58.622 8.424 58.19 8.451 57.83 8.505C57.488 8.541 57.263 8.559 57.155 8.559V16.659C57.371 16.695 57.893 16.713 58.721 16.713H59.639ZM70.674 19.521C70.674 17.829 71.007 16.389 71.673 15.201C72.357 14.013 73.266 13.122 74.4 12.528C75.534 11.916 76.767 11.61 78.099 11.61C80.367 11.61 82.113 12.312 83.337 13.716C84.579 15.102 85.2 16.992 85.2 19.386C85.2 21.096 84.858 22.554 84.174 23.76C83.508 24.948 82.608 25.839 81.474 26.433C80.358 27.009 79.125 27.297 77.775 27.297C75.525 27.297 73.779 26.604 72.537 25.218C71.295 23.814 70.674 21.915 70.674 19.521ZM77.991 25.542C80.025 25.542 81.042 23.58 81.042 19.656C81.042 17.604 80.799 16.047 80.313 14.985C79.827 13.905 79.035 13.365 77.937 13.365C75.849 13.365 74.805 15.327 74.805 19.251C74.805 21.303 75.057 22.869 75.561 23.949C76.083 25.011 76.893 25.542 77.991 25.542ZM86.4395 5.454L91.3805 4.86H91.4345L92.1905 5.373V13.338C92.6765 12.852 93.2705 12.447 93.9725 12.123C94.6925 11.781 95.4665 11.61 96.2945 11.61C98.0225 11.61 99.4265 12.222 100.506 13.446C101.604 14.652 102.153 16.506 102.153 19.008C102.153 20.556 101.829 21.96 101.181 23.22C100.533 24.48 99.5975 25.479 98.3735 26.217C97.1675 26.937 95.7635 27.297 94.1615 27.297C92.7395 27.297 91.5065 27.18 90.4625 26.946C89.4185 26.694 88.7525 26.469 88.4645 26.271V7.182L86.4395 6.858V5.454ZM94.8635 13.986C94.3235 13.986 93.8105 14.112 93.3245 14.364C92.8565 14.598 92.4785 14.868 92.1905 15.174V25.029C92.2985 25.227 92.5505 25.389 92.9465 25.515C93.3425 25.641 93.7925 25.704 94.2965 25.704C95.4485 25.704 96.3665 25.173 97.0505 24.111C97.7525 23.031 98.1035 21.438 98.1035 19.332C98.1035 17.514 97.8065 16.173 97.2125 15.309C96.6185 14.427 95.8355 13.986 94.8635 13.986Z' fill='black'/%3E%3Cpath d='M104.183 25.38L106.316 25.11V8.964L104.291 8.586V6.939H108.206C108.548 6.939 108.926 6.93 109.34 6.912C109.754 6.894 110.069 6.876 110.285 6.858C111.221 6.786 111.995 6.75 112.607 6.75C114.461 6.75 115.946 6.939 117.062 7.317C118.178 7.695 118.988 8.271 119.492 9.045C119.996 9.819 120.248 10.836 120.248 12.096C120.248 13.338 119.915 14.49 119.249 15.552C118.583 16.614 117.62 17.343 116.36 17.739C117.08 18.045 117.719 18.603 118.277 19.413C118.835 20.223 119.429 21.276 120.059 22.572C120.509 23.454 120.851 24.093 121.085 24.489C121.337 24.867 121.58 25.083 121.814 25.137L122.705 25.407V27H118.115C117.827 27 117.521 26.712 117.197 26.136C116.891 25.542 116.486 24.615 115.982 23.355C115.388 21.879 114.875 20.727 114.443 19.899C114.011 19.071 113.552 18.558 113.066 18.36H110.285V25.11L112.769 25.38V27H104.183V25.38ZM112.769 16.713C113.795 16.713 114.596 16.344 115.172 15.606C115.748 14.868 116.036 13.761 116.036 12.285C116.036 10.971 115.748 9.999 115.172 9.369C114.614 8.739 113.642 8.424 112.256 8.424C111.752 8.424 111.32 8.451 110.96 8.505C110.618 8.541 110.393 8.559 110.285 8.559V16.659C110.501 16.695 111.023 16.713 111.851 16.713H112.769ZM123.804 19.521C123.804 17.829 124.137 16.389 124.803 15.201C125.487 14.013 126.396 13.122 127.53 12.528C128.664 11.916 129.897 11.61 131.229 11.61C133.497 11.61 135.243 12.312 136.467 13.716C137.709 15.102 138.33 16.992 138.33 19.386C138.33 21.096 137.988 22.554 137.304 23.76C136.638 24.948 135.738 25.839 134.604 26.433C133.488 27.009 132.255 27.297 130.905 27.297C128.655 27.297 126.909 26.604 125.667 25.218C124.425 23.814 123.804 21.915 123.804 19.521ZM131.121 25.542C133.155 25.542 134.172 23.58 134.172 19.656C134.172 17.604 133.929 16.047 133.443 14.985C132.957 13.905 132.165 13.365 131.067 13.365C128.979 13.365 127.935 15.327 127.935 19.251C127.935 21.303 128.187 22.869 128.691 23.949C129.213 25.011 130.023 25.542 131.121 25.542ZM143.187 33.723C142.863 33.723 142.512 33.696 142.134 33.642C141.774 33.588 141.513 33.525 141.351 33.453V30.564C141.477 30.636 141.729 30.708 142.107 30.78C142.485 30.852 142.827 30.888 143.133 30.888C144.033 30.888 144.771 30.591 145.347 29.997C145.941 29.403 146.49 28.404 146.994 27H145.536L140.46 13.905L139.245 13.554V11.988H146.67V13.554L144.699 13.878L147.102 21.357L148.074 24.543L148.911 21.357L151.125 13.878L149.424 13.554V11.988H155.283V13.554L153.96 13.878C152.97 16.902 151.989 19.818 151.017 22.626C150.045 25.434 149.478 27.009 149.316 27.351C148.74 28.863 148.191 30.069 147.669 30.969C147.147 31.869 146.526 32.553 145.806 33.021C145.086 33.489 144.213 33.723 143.187 33.723Z' fill='%236CBE34'/%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\"logoProfileAltText\":\"RobRoy\",\"logoProfileCollapsed\":\"data:image/svg+xml,%0A%3Csvg width='33' height='33' viewBox='0 0 33 33' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445996 0.446289 0.445996 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\"logoProfileCollapsedAltText\":\"RobRoy\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"28\",\"name\":\"Robroy\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#5AA625\",\"primaryOffColor\":\"#49871E\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#5AA625\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"cd6c93e2-52e2-4340-9770-66a588343841\",\"accountFooter\":\"\",\"accountFooterEnabled\":false,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#000000\",\"buttonRounded\":\"0\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\",\"journeyFooterEnabled\":false,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#000000\",\"linkColor\":\"#000000\",\"linkedTrees\":[],\"logo\":\"https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg\",\"logoAltText\":\"Contrast\",\"logoEnabled\":true,\"logoHeight\":\"72\",\"logoProfile\":\"data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A\",\"logoProfileAltText\":\"Contrast\",\"logoProfileCollapsed\":\"data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A\",\"logoProfileCollapsedAltText\":\"\",\"logoProfileCollapsedHeight\":\"22\",\"logoProfileHeight\":\"22\",\"name\":\"Contrast\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#000000\",\"primaryOffColor\":\"#000000\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#000000\",\"profileMenuTextHighlightColor\":\"#455469\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"}]}},{\"_id\":\"uilocale/fr\",\"admin\":{\"overrides\":{\"AppLogoURI\":\"URI du logo de l’application\",\"EmailAddress\":\"Adresse e-mail\",\"Name\":\"Nom\",\"Owners\":\"Les propriétaires\"},\"sideMenu\":{\"securityQuestions\":\"Questions de sécurité\"}},\"enduser\":{\"overrides\":{\"FirstName\":\"Prénom\",\"LastName\":\"Nom de famille\"},\"pages\":{\"dashboard\":{\"widgets\":{\"welcome\":{\"greeting\":\"Bonjour\"}}}}},\"login\":{\"login\":{\"next\":\"Suivant\"},\"overrides\":{\"Password\":\"Mot de passe\",\"UserName\":\"Nom d'utilisateur\"}},\"shared\":{\"sideMenu\":{\"dashboard\":\"Tableau de bord\"}}},{\"_id\":\"undefined\",\"mapping\":{\"mapping/managedBravo_user_managedBravo_user0\":{\"_id\":\"mapping/managedBravo_user_managedBravo_user0\",\"consentRequired\":false,\"displayName\":\"managedBravo_user_managedBravo_user0\",\"icon\":null,\"name\":\"managedBravo_user_managedBravo_user0\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/bravo_user\",\"target\":\"managed/bravo_user\"}}}],\"resultCount\":67,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":67,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 671, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.504Z", - "time": 131, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 131 - } - }, - { - "_id": "b184093074ffea48d93b8e1ac0d9ef4a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1917, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/access" - }, - "response": { - "bodySize": 6529, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 6529, - "text": "{\"_id\":\"access\",\"configs\":[{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"info/*\",\"roles\":\"*\"},{\"actions\":\"login,logout\",\"methods\":\"read,action\",\"pattern\":\"authentication\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/fidc/*\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"*\",\"pattern\":\"config/fidc/*\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/ui/themeconfig\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/ui/themerealm\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/uilocale/*\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/fieldPolicy/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"info/uiconfig\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/ui/dashboard\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"methods\":\"query\",\"pattern\":\"info/features\",\"roles\":\"*\"},{\"actions\":\"listPrivileges\",\"methods\":\"action\",\"pattern\":\"privilege\",\"roles\":\"*\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"privilege/*\",\"roles\":\"*\"},{\"actions\":\"validate\",\"methods\":\"action\",\"pattern\":\"util/validateQueryFilter\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"customAuthz\":\"checkIfAnyFeatureEnabled('kba')\",\"methods\":\"read\",\"pattern\":\"selfservice/kba\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"schema/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"methods\":\"action,query\",\"pattern\":\"consent\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"excludePatterns\":\"repo,repo/*\",\"methods\":\"*\",\"pattern\":\"*\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"\",\"methods\":\"create,read,update,delete,patch,query\",\"pattern\":\"system/*\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"*\",\"methods\":\"script\",\"pattern\":\"system/*\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"test,testConfig,createconfiguration,liveSync,authenticate\",\"methods\":\"action\",\"pattern\":\"system/*\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"*\",\"customAuthz\":\"disallowCommandAction()\",\"methods\":\"*\",\"pattern\":\"repo\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"*\",\"customAuthz\":\"disallowCommandAction()\",\"methods\":\"*\",\"pattern\":\"repo/*\",\"roles\":\"internal/role/openidm-admin\"},{\"actions\":\"command\",\"customAuthz\":\"request.additionalParameters.commandId === 'delete-mapping-links'\",\"methods\":\"action\",\"pattern\":\"repo/link\",\"roles\":\"internal/role/openidm-admin\"},{\"methods\":\"create,read,query,patch\",\"pattern\":\"managed/*\",\"roles\":\"internal/role/platform-provisioning\"},{\"methods\":\"read,query\",\"pattern\":\"internal/role/*\",\"roles\":\"internal/role/platform-provisioning\"},{\"actions\":\"*\",\"methods\":\"create,read,action,update\",\"pattern\":\"profile/*\",\"roles\":\"internal/role/platform-provisioning\"},{\"actions\":\"*\",\"methods\":\"read,action\",\"pattern\":\"policy/*\",\"roles\":\"internal/role/platform-provisioning\"},{\"methods\":\"read\",\"pattern\":\"schema/*\",\"roles\":\"internal/role/platform-provisioning\"},{\"actions\":\"*\",\"methods\":\"action,query\",\"pattern\":\"consent\",\"roles\":\"internal/role/platform-provisioning\"},{\"methods\":\"read\",\"pattern\":\"selfservice/kba\",\"roles\":\"internal/role/platform-provisioning\"},{\"methods\":\"read\",\"pattern\":\"selfservice/terms\",\"roles\":\"internal/role/platform-provisioning\"},{\"methods\":\"read\",\"pattern\":\"identityProviders\",\"roles\":\"internal/role/platform-provisioning\"},{\"actions\":\"sendTemplate\",\"methods\":\"action\",\"pattern\":\"external/email\",\"roles\":\"internal/role/platform-provisioning\"},{\"actions\":\"authenticate\",\"methods\":\"action\",\"pattern\":\"system/*\",\"roles\":\"internal/role/platform-provisioning\"},{\"actions\":\"*\",\"methods\":\"read,action\",\"pattern\":\"policy/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"methods\":\"read\",\"pattern\":\"config/ui/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"bind,unbind\",\"customAuthz\":\"ownDataOnly()\",\"methods\":\"read,action,delete\",\"pattern\":\"*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"patch\",\"customAuthz\":\"ownDataOnly() && onlyEditableManagedObjectProperties('user', [])\",\"methods\":\"update,patch,action\",\"pattern\":\"*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"patch\",\"customAuthz\":\"(request.resourcePath === 'selfservice/user/' + context.security.authorization.id) && onlyEditableManagedObjectProperties('user', [])\",\"methods\":\"patch,action\",\"pattern\":\"selfservice/user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"patch\",\"customAuthz\":\"isQueryOneOf({'managed/user': ['for-userName']}) && restrictPatchToFields(['password'])\",\"methods\":\"patch,action\",\"pattern\":\"managed/user\",\"roles\":\"internal/role/openidm-cert\"},{\"actions\":\"*\",\"customAuthz\":\"ownRelationshipProperty('_meta', false)\",\"methods\":\"read\",\"pattern\":\"internal/usermeta/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"customAuthz\":\"ownRelationshipProperty('_notifications', true)\",\"methods\":\"read,delete\",\"pattern\":\"internal/notification/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"customAuthz\":\"ownRelationshipCollection(['_meta','_notifications'])\",\"methods\":\"read,query\",\"pattern\":\"managed/user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"\",\"customAuthz\":\"ownDataOnly()\",\"methods\":\"read,delete\",\"pattern\":\"managed/alpha_user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"patch\",\"customAuthz\":\"ownDataOnly() && onlyEditableManagedObjectProperties('alpha_user', [])\",\"methods\":\"update,patch,action\",\"pattern\":\"managed/alpha_user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"customAuthz\":\"ownRelationshipCollection(['_meta','_notifications'])\",\"methods\":\"read,query\",\"pattern\":\"managed/alpha_user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"\",\"customAuthz\":\"ownDataOnly()\",\"methods\":\"read,delete\",\"pattern\":\"managed/bravo_user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"patch\",\"customAuthz\":\"ownDataOnly() && onlyEditableManagedObjectProperties('bravo_user', [])\",\"methods\":\"update,patch,action\",\"pattern\":\"managed/bravo_user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"*\",\"customAuthz\":\"ownRelationshipCollection(['_meta','_notifications'])\",\"methods\":\"read,query\",\"pattern\":\"managed/bravo_user/*\",\"roles\":\"internal/role/openidm-authorized\"},{\"actions\":\"deleteNotificationsForTarget\",\"customAuthz\":\"request.additionalParameters.target === (context.security.authorization.component + '/' + context.security.authorization.id)\",\"methods\":\"action\",\"pattern\":\"notification\",\"roles\":\"internal/role/openidm-authorized\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "6529" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.695Z", - "time": 220, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 220 - } - }, - { - "_id": "29c3cee7e5b820072d5906ffa56a70dc", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1929, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/alphaOrgPrivileges" - }, - "response": { - "bodySize": 8640, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 8640, - "text": "{\"_id\":\"alphaOrgPrivileges\",\"privileges\":[{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":false},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/ownerIDs eq \\\"{{_id}}\\\" or /parentOwnerIDs eq \\\"{{_id}}\\\"\",\"name\":\"owner-view-update-delete-orgs\",\"path\":\"managed/alpha_organization\",\"permissions\":[\"VIEW\",\"UPDATE\",\"DELETE\"]},{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":false},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/parent pr\",\"name\":\"owner-create-orgs\",\"path\":\"managed/alpha_organization\",\"permissions\":[\"CREATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":false},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrgIDs eq \\\"__org_id_placeholder__\\\"\",\"name\":\"owner-view-update-delete-admins-and-members\",\"path\":\"managed/alpha_user\",\"permissions\":[\"VIEW\",\"DELETE\",\"UPDATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":false},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrg/0 pr and /adminOfOrg/0 pr and !(/ownerOfOrg pr)\",\"name\":\"owner-create-admins\",\"path\":\"managed/alpha_user\",\"permissions\":[\"CREATE\"]},{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":true},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/adminIDs eq \\\"{{_id}}\\\" or /parentAdminIDs eq \\\"{{_id}}\\\"\",\"name\":\"admin-view-update-delete-orgs\",\"path\":\"managed/alpha_organization\",\"permissions\":[\"VIEW\",\"UPDATE\",\"DELETE\"]},{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":true},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/parent pr\",\"name\":\"admin-create-orgs\",\"path\":\"managed/alpha_organization\",\"permissions\":[\"CREATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":true},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrgIDs eq \\\"__org_id_placeholder__\\\"\",\"name\":\"admin-view-update-delete-members\",\"path\":\"managed/alpha_user\",\"permissions\":[\"VIEW\",\"DELETE\",\"UPDATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":true},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrg/0 pr and !(/adminOfOrg pr) and !(/ownerOfOrg pr)\",\"name\":\"admin-create-members\",\"path\":\"managed/alpha_user\",\"permissions\":[\"CREATE\"]}]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "8640" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.697Z", - "time": 216, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 216 - } - }, - { - "_id": "37717db1403fe0fca4c76faa7b01295c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1916, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/audit" - }, - "response": { - "bodySize": 2757, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 2757, - "text": "{\"_id\":\"audit\",\"auditServiceConfig\":{\"availableAuditEventHandlers\":[\"org.forgerock.audit.handlers.csv.CsvAuditEventHandler\",\"org.forgerock.audit.handlers.elasticsearch.ElasticsearchAuditEventHandler\",\"org.forgerock.audit.handlers.jms.JmsAuditEventHandler\",\"org.forgerock.audit.handlers.json.JsonAuditEventHandler\",\"org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler\",\"org.forgerock.openidm.audit.impl.RepositoryAuditEventHandler\",\"org.forgerock.openidm.audit.impl.RouterAuditEventHandler\",\"org.forgerock.audit.handlers.splunk.SplunkAuditEventHandler\",\"org.forgerock.audit.handlers.syslog.SyslogAuditEventHandler\"],\"caseInsensitiveFields\":[\"/access/http/request/headers\",\"/access/http/response/headers\"],\"filterPolicies\":{\"value\":{\"excludeIf\":[\"/access/http/request/cookies/&{com.iplanet.am.cookie.name}\",\"/access/http/request/cookies/session-jwt\",\"/access/http/request/headers/&{com.sun.identity.auth.cookieName}\",\"/access/http/request/headers/&{com.iplanet.am.cookie.name}\",\"/access/http/request/headers/accept-encoding\",\"/access/http/request/headers/accept-language\",\"/access/http/request/headers/Authorization\",\"/access/http/request/headers/cache-control\",\"/access/http/request/headers/connection\",\"/access/http/request/headers/content-length\",\"/access/http/request/headers/content-type\",\"/access/http/request/headers/proxy-authorization\",\"/access/http/request/headers/X-OpenAM-Password\",\"/access/http/request/headers/X-OpenIDM-Password\",\"/access/http/request/queryParameters/access_token\",\"/access/http/request/queryParameters/IDToken1\",\"/access/http/request/queryParameters/id_token_hint\",\"/access/http/request/queryParameters/Login.Token1\",\"/access/http/request/queryParameters/redirect_uri\",\"/access/http/request/queryParameters/requester\",\"/access/http/request/queryParameters/sessionUpgradeSSOTokenId\",\"/access/http/request/queryParameters/tokenId\",\"/access/http/response/headers/Authorization\",\"/access/http/response/headers/Set-Cookie\",\"/access/http/response/headers/X-OpenIDM-Password\"],\"includeIf\":[]}},\"handlerForQueries\":\"json\"},\"eventHandlers\":[{\"class\":\"org.forgerock.audit.handlers.json.stdout.JsonStdoutAuditEventHandler\",\"config\":{\"name\":\"json\",\"topics\":[\"access\",\"activity\",\"sync\",\"authentication\",\"config\"]}},{\"class\":\"org.forgerock.openidm.audit.impl.RepositoryAuditEventHandler\",\"config\":{\"enabled\":false,\"name\":\"repo\",\"topics\":[\"access\",\"activity\",\"sync\",\"authentication\",\"config\"]}}],\"eventTopics\":{\"activity\":{\"filter\":{\"actions\":[\"create\",\"update\",\"delete\",\"patch\",\"action\"]},\"passwordFields\":[\"password\"],\"watchedFields\":[]},\"config\":{\"filter\":{\"actions\":[\"create\",\"update\",\"delete\",\"patch\",\"action\"]}}},\"exceptionFormatter\":{\"file\":\"bin/defaults/script/audit/stacktraceFormatter.js\",\"type\":\"text/javascript\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "2757" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.699Z", - "time": 324, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 324 - } - }, - { - "_id": "653fe2843bcc7fd80db785216049a251", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1925, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/authentication" - }, - "response": { - "bodySize": 779, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 779, - "text": "{\"_id\":\"authentication\",\"rsFilter\":{\"augmentSecurityContext\":{\"source\":\"require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, security.authorization.component.includes('/alpha_') ? 'alphaOrgPrivileges' : 'bravoOrgPrivileges', 'privilegeAssignments');\",\"type\":\"text/javascript\"},\"cache\":{\"maxTimeout\":\"300 seconds\"},\"scopes\":[\"fr:idm:*\"],\"staticUserMapping\":[{\"localUser\":\"internal/user/idm-provisioning\",\"roles\":[\"internal/role/openidm-admin\"],\"subject\":\"autoid-resource-server\"}],\"subjectMapping\":[{\"additionalUserFields\":[\"adminOfOrg\",\"ownerOfOrg\"],\"defaultRoles\":[\"internal/role/openidm-authorized\"],\"propertyMapping\":{\"sub\":\"_id\"},\"queryOnResource\":\"managed/{{substring realm 1}}_user\",\"userRoles\":\"authzRoles/*\"}]}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "779" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.703Z", - "time": 300, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 300 - } - }, - { - "_id": "c43ae139aa432cd3867754302792e4d2", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1929, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/bravoOrgPrivileges" - }, - "response": { - "bodySize": 8640, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 8640, - "text": "{\"_id\":\"bravoOrgPrivileges\",\"privileges\":[{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":false},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/ownerIDs eq \\\"{{_id}}\\\" or /parentOwnerIDs eq \\\"{{_id}}\\\"\",\"name\":\"owner-view-update-delete-orgs\",\"path\":\"managed/bravo_organization\",\"permissions\":[\"VIEW\",\"UPDATE\",\"DELETE\"]},{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":false},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/parent pr\",\"name\":\"owner-create-orgs\",\"path\":\"managed/bravo_organization\",\"permissions\":[\"CREATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":false},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrgIDs eq \\\"__org_id_placeholder__\\\"\",\"name\":\"owner-view-update-delete-admins-and-members\",\"path\":\"managed/bravo_user\",\"permissions\":[\"VIEW\",\"DELETE\",\"UPDATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":false},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrg/0 pr and /adminOfOrg/0 pr and !(/ownerOfOrg pr)\",\"name\":\"owner-create-admins\",\"path\":\"managed/bravo_user\",\"permissions\":[\"CREATE\"]},{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":true},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/adminIDs eq \\\"{{_id}}\\\" or /parentAdminIDs eq \\\"{{_id}}\\\"\",\"name\":\"admin-view-update-delete-orgs\",\"path\":\"managed/bravo_organization\",\"permissions\":[\"VIEW\",\"UPDATE\",\"DELETE\"]},{\"accessFlags\":[{\"attribute\":\"name\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"owners\",\"readOnly\":true},{\"attribute\":\"admins\",\"readOnly\":true},{\"attribute\":\"members\",\"readOnly\":false},{\"attribute\":\"parent\",\"readOnly\":false},{\"attribute\":\"children\",\"readOnly\":false},{\"attribute\":\"parentIDs\",\"readOnly\":true},{\"attribute\":\"adminIDs\",\"readOnly\":true},{\"attribute\":\"parentAdminIDs\",\"readOnly\":true},{\"attribute\":\"ownerIDs\",\"readOnly\":true},{\"attribute\":\"parentOwnerIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/parent pr\",\"name\":\"admin-create-orgs\",\"path\":\"managed/bravo_organization\",\"permissions\":[\"CREATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":true},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrgIDs eq \\\"__org_id_placeholder__\\\"\",\"name\":\"admin-view-update-delete-members\",\"path\":\"managed/bravo_user\",\"permissions\":[\"VIEW\",\"DELETE\",\"UPDATE\"]},{\"accessFlags\":[{\"attribute\":\"userName\",\"readOnly\":false},{\"attribute\":\"password\",\"readOnly\":false},{\"attribute\":\"givenName\",\"readOnly\":false},{\"attribute\":\"sn\",\"readOnly\":false},{\"attribute\":\"mail\",\"readOnly\":false},{\"attribute\":\"description\",\"readOnly\":false},{\"attribute\":\"accountStatus\",\"readOnly\":false},{\"attribute\":\"telephoneNumber\",\"readOnly\":false},{\"attribute\":\"postalAddress\",\"readOnly\":false},{\"attribute\":\"city\",\"readOnly\":false},{\"attribute\":\"postalCode\",\"readOnly\":false},{\"attribute\":\"country\",\"readOnly\":false},{\"attribute\":\"stateProvince\",\"readOnly\":false},{\"attribute\":\"roles\",\"readOnly\":false},{\"attribute\":\"groups\",\"readOnly\":false},{\"attribute\":\"manager\",\"readOnly\":false},{\"attribute\":\"authzRoles\",\"readOnly\":false},{\"attribute\":\"reports\",\"readOnly\":false},{\"attribute\":\"effectiveRoles\",\"readOnly\":false},{\"attribute\":\"effectiveAssignments\",\"readOnly\":false},{\"attribute\":\"effectiveGroups\",\"readOnly\":false},{\"attribute\":\"lastSync\",\"readOnly\":false},{\"attribute\":\"kbaInfo\",\"readOnly\":false},{\"attribute\":\"preferences\",\"readOnly\":false},{\"attribute\":\"consentedMappings\",\"readOnly\":false},{\"attribute\":\"memberOfOrg\",\"readOnly\":false},{\"attribute\":\"adminOfOrg\",\"readOnly\":true},{\"attribute\":\"ownerOfOrg\",\"readOnly\":true},{\"attribute\":\"memberOfOrgIDs\",\"readOnly\":true}],\"actions\":[],\"filter\":\"/memberOfOrg/0 pr and !(/adminOfOrg pr) and !(/ownerOfOrg pr)\",\"name\":\"admin-create-members\",\"path\":\"managed/bravo_user\",\"permissions\":[\"CREATE\"]}]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "8640" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.708Z", - "time": 305, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 305 - } - }, - { - "_id": "645665e9195420417591eb46b3c44768", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1954, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/baselineDemoEmailVerification" - }, - "response": { - "bodySize": 3342, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 3342, - "text": "{\"_id\":\"emailTemplate/baselineDemoEmailVerification\",\"defaultLocale\":\"en\",\"displayName\":\"Baseline Demo Email Verification\",\"enabled\":true,\"from\":\"security@example.com\",\"html\":{\"en\":\"

Email Verification


Hello,

Great to have you on board.



Verify Your Account

Finish the steps of verification for the account by clicking the button below.


Click Here to Verify Your Account

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"message\":{\"en\":\"

Email Verification


Hello,

Great to have you on board.



Verify Your Account

Finish the steps of verfication for the account by clicking the button below.


Click Here to Verify Your Account

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"mimeType\":\"text/html\",\"styles\":\"body {\\n background-color: #f6f6f6;\\n color: #455469;\\n padding: 60px;\\n text-align: center \\n}\\n a {\\n text-decoration: none;\\n color: #109cf1;\\n}\\n h1 {\\n font-size: 40px;\\n text-align: center;\\n}\\n h2 {\\n font-size: 36px;\\n}\\n h3 {\\n font-size: 32px;\\n}\\n h4 {\\n font-size: 28px;\\n}\\n h5 {\\n font-size: 24px;\\n}\\n h6 {\\n font-size: 20px;\\n}\\n .content {\\n background-color: #fff;\\n border-radius: 4px;\\n margin: 0 auto;\\n padding: 48px;\\n width: 600px \\n}\\n .button {\\n background-color: #109cf1;\\n border: none;\\n color: white;\\n padding: 15px 32px;\\n text-align: center;\\n text-decoration: none;\\n display: inline-block;\\n font-size: 16px;\\n}\\n \",\"subject\":{\"en\":\"Please verify your email address\"},\"templateId\":\"baselineDemoEmailVerification\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "3342" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.711Z", - "time": 298, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 298 - } - }, - { - "_id": "c7e5e04010132c19e41d1f02c66e18bb", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1946, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/baselineDemoMagicLink" - }, - "response": { - "bodySize": 2484, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 2484, - "text": "{\"_id\":\"emailTemplate/baselineDemoMagicLink\",\"defaultLocale\":\"en\",\"displayName\":\"Baseline Demo Magic Link\",\"enabled\":true,\"from\":\"security@example.com\",\"html\":{\"en\":\"

Welcome back


Hello,

You're receiving this email because you requested a link to sign you into your account.



Finish Signing In

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"message\":{\"en\":\"

Welcome back


Hello,

You're receiving this email because you requested a link to sign you into your account.



Finish Signing In

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"mimeType\":\"text/html\",\"styles\":\"body {\\n background-color: #f6f6f6;\\n color: #455469;\\n padding: 60px;\\n text-align: center \\n}\\n a {\\n text-decoration: none;\\n color: #109cf1;\\n}\\n h1 {\\n font-size: 40px;\\n text-align: center;\\n}\\n h2 {\\n font-size: 36px;\\n}\\n h3 {\\n font-size: 32px;\\n}\\n h4 {\\n font-size: 28px;\\n}\\n h5 {\\n font-size: 24px;\\n}\\n h6 {\\n font-size: 20px;\\n}\\n .content {\\n background-color: #fff;\\n border-radius: 4px;\\n margin: 0 auto;\\n padding: 48px;\\n width: 600px \\n}\\n .button {\\n background-color: #109cf1;\\n border: none;\\n color: white;\\n padding: 15px 32px;\\n text-align: center;\\n text-decoration: none;\\n display: inline-block;\\n font-size: 16px;\\n}\\n \",\"subject\":{\"en\":\"Your sign-in link\"},\"templateId\":\"baselineDemoMagicLink\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "2484" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.714Z", - "time": 337, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 337 - } - }, - { - "_id": "8b83418cf28acd1b939879c72c951589", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1942, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/forgottenUsername" - }, - "response": { - "bodySize": 2036, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 2036, - "text": "{\"_id\":\"emailTemplate/forgottenUsername\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"{{#if object.userName}}

Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

\",\"fr\":\"{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

\"},\"message\":{\"en\":\"

{{#if object.userName}}Your username is '{{object.userName}}'.

{{else}}If you received this email in error, please disregard.{{/if}}

Click here to login

\",\"fr\":\"
{{#if object.userName}}

Votre nom d'utilisateur est '{{object.userName}}'.

{{else}}Si vous avez reçu cet e-mail par erreur, veuillez ne pas en tenir compte.{{/if}}

Cliquez ici pour vous connecter

\"},\"mimeType\":\"text/html\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"Account Information - username\",\"fr\":\"Informations sur le compte - nom d'utilisateur\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "2036" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.718Z", - "time": 297, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 297 - } - }, - { - "_id": "12b2b1e549b7b3f49c300e4074d568c3", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1939, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/frEmailUpdated" - }, - "response": { - "bodySize": 1629, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1629, - "text": "{\"_id\":\"emailTemplate/frEmailUpdated\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Your account email has changed

Your ForgeRock Identity Cloud email has been changed. If you did not request this change, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Your email has been updated\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1629" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.721Z", - "time": 283, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 283 - } - }, - { - "_id": "05e07a8e26cc298a53e84db23b4204b7", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1941, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/frForgotUsername" - }, - "response": { - "bodySize": 1803, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1803, - "text": "{\"_id\":\"emailTemplate/frForgotUsername\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Forgot your username?

Your username is {{ object.userName }}.

Sign In to Your Account

If you didn't request this, please ignore this email.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Forgot Username\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1803" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.726Z", - "time": 332, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 332 - } - }, - { - "_id": "4490c450610d609391af5fdf35175a42", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1937, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/frOnboarding" - }, - "response": { - "bodySize": 1953, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1953, - "text": "{\"_id\":\"emailTemplate/frOnboarding\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Your account is ready

Your ForgeRock Identity Cloud account is ready. Click the button below to complete registration and access your environment.

Complete Registration

If you did not request this account, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Complete your ForgeRock Identity Cloud registration\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1953" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.730Z", - "time": 319, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 319 - } - }, - { - "_id": "26393e11df91c3b14f84b3ec5c18c57f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1942, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/frPasswordUpdated" - }, - "response": { - "bodySize": 1641, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1641, - "text": "{\"_id\":\"emailTemplate/frPasswordUpdated\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Your account password has changed

Your ForgeRock Identity Cloud password has been changed. If you did not request this change, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Your password has been updated\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1641" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.734Z", - "time": 295, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 295 - } - }, - { - "_id": "4974ee9f893ac016fbb4d1803715a8ed", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1941, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/frProfileUpdated" - }, - "response": { - "bodySize": 1637, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1637, - "text": "{\"_id\":\"emailTemplate/frProfileUpdated\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Your account profile has changed

Your ForgeRock Identity Cloud profile has been changed. If you did not request this change, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Your profile has been updated\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1637" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.738Z", - "time": 388, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 388 - } - }, - { - "_id": "1d3625b4b2cdbe5e72aa12ed23cc437c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1940, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/frResetPassword" - }, - "response": { - "bodySize": 1959, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1959, - "text": "{\"_id\":\"emailTemplate/frResetPassword\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Reset your password

It seems you have forgotten the password for your ForgeRock Identity Cloud account. Click the button below to reset your password and access your environment.

Reset Password

If you did not request to reset your password, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Reset your password\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1959" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.741Z", - "time": 397, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 397 - } - }, - { - "_id": "07e5ae42155d0587aaa613be867c5c6d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1942, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/frUsernameUpdated" - }, - "response": { - "bodySize": 1641, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1641, - "text": "{\"_id\":\"emailTemplate/frUsernameUpdated\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"
\\\"ForgeRock

Your account username has changed

Your ForgeRock Identity Cloud username has been changed. If you did not request this change, please contact ForgeRock support.

Thanks,
The ForgeRock Team

© 2001-{{ object.currentYear }} ForgeRock Inc®, All Rights Reserved.
201 Mission St Suite 2900, San Francisco, CA 94105
Privacy Policy
\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Your username has been updated\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1641" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.744Z", - "time": 423, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 423 - } - }, - { - "_id": "ffb3e8eca5347bceff68ba85fe94bc12", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1928, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/idv" - }, - "response": { - "bodySize": 1661, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1661, - "text": "{\"_id\":\"emailTemplate/idv\",\"defaultLocale\":\"en\",\"description\":\"Identity Verification Invitation\",\"displayName\":\"idv\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"

Click the link below to verify your identity:

Verify my identity now

\",\"fr\":\"

Ceci est votre mail d'inscription.

Lien de vérification email

\"},\"message\":{\"en\":\"

Click the link below to verify your identity:

Verify my identity now

\",\"fr\":\"

Ceci est votre mail d'inscription.

Lien de vérification email

\"},\"mimeType\":\"text/html\",\"name\":\"registration\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"You have been invited to verify your identity\",\"fr\":\"Créer un nouveau compte\"},\"templateId\":\"idv\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1661" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.746Z", - "time": 374, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 374 - } - }, - { - "_id": "8022b69dcb744b82216a9ab1bf79e5de", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1931, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/joiner" - }, - "response": { - "bodySize": 1985, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1985, - "text": "{\"_id\":\"emailTemplate/joiner\",\"advancedEditor\":true,\"defaultLocale\":\"en\",\"description\":\"This email will be sent onCreate of user to the external eMail address provided during creation. An OTP will also be sent to Telephone Number provided during creation to validate the user. The user will then be able to set their password and ForgeRock Push Authenticator\",\"displayName\":\"Joiner\",\"enabled\":true,\"from\":\"\\\"Encore HR\\\" \",\"html\":{\"en\":\"\"},\"message\":{\"en\":\"\\n \\n \\n
\\n

\\n \\n

\\n

Welcome to Encore {{object.givenName}} {{object.sn}}

\\n

Please click on the link below to validate your phone number with a One Time Code that will be sent via SMS or called to you depending on your phone type.

\\n

You will see your UserName and have the ability to set your password that will be used to login to Encore resources.

\\n

As we believe in enhanced security, you will also be setting up a Push Notification for future use.

\\n Click to Join Encore\\n
\\n \\n\"},\"mimeType\":\"text/html\",\"styles\":\"body {\\n background-color: #324054;\\n color: #455469;\\n padding: 60px;\\n text-align: center \\n}\\n a {\\n text-decoration: none;\\n color: #109cf1;\\n}\\n .content {\\n background-color: #fff;\\n border-radius: 4px;\\n margin: 0 auto;\\n padding: 48px;\\n width: 235px \\n}\\n \",\"subject\":{\"en\":\"Welcome to Encore!\"},\"templateId\":\"joiner\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1985" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.750Z", - "time": 338, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 338 - } - }, - { - "_id": "d89078661d8a6c3e8fc1f9d50ad77ae8", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1951, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/registerPasswordlessDevice" - }, - "response": { - "bodySize": 2744, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 2744, - "text": "{\"_id\":\"emailTemplate/registerPasswordlessDevice\",\"defaultLocale\":\"en\",\"description\":\"\",\"displayName\":\"Register Passwordless Device\",\"enabled\":true,\"from\":\"\\\"ForgeRock Identity Cloud\\\" \",\"html\":{\"en\":\"

Welcome back

\\\"alt


Hello,

You're receiving this email because you requested a link to register a new passwordless device.



Register New Device

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"message\":{\"en\":\"

Welcome back

\\\"alt


Hello,

You're receiving this email because you requested a link to register a new passwordless device.



Register New Device

This link will expire in 24 hours.


-- The ForgeRock Team

www.forgerock.com

201 Mission St Suite 2900

San Francisco, CA 94105

support@forgerock.com


If you did not request for this email, please ignore and we won't email you again.

ForgeRock | Privacy Policy

\"},\"mimeType\":\"text/html\",\"styles\":\"body {\\n\\tbackground-color: #324054;\\n\\tcolor: #455469;\\n\\tpadding: 60px;\\n\\ttext-align: center\\n}\\n\\na {\\n\\ttext-decoration: none;\\n\\tcolor: #109cf1;\\n}\\n\\n.content {\\n\\tbackground-color: #fff;\\n\\tborder-radius: 4px;\\n\\tmargin: 0 auto;\\n\\tpadding: 48px;\\n\\twidth: 235px\\n}\\n\",\"subject\":{\"en\":\"Your magic link is here - register new WebAuthN device\"},\"templateId\":\"registerPasswordlessDevice\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "2744" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.753Z", - "time": 362, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 362 - } - }, - { - "_id": "ba8f08c2397259b7af7094fa4d11c519", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1937, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/registration" - }, - "response": { - "bodySize": 1546, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1546, - "text": "{\"_id\":\"emailTemplate/registration\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"

This is your registration email.

Email verification link

\",\"fr\":\"

Ceci est votre mail d'inscription.

Lien de vérification email

\"},\"message\":{\"en\":\"

This is your registration email.

Email verification link

\",\"fr\":\"

Ceci est votre mail d'inscription.

Lien de vérification email

\"},\"mimeType\":\"text/html\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"Register new account\",\"fr\":\"Créer un nouveau compte\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1546" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.756Z", - "time": 399, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 399 - } - }, - { - "_id": "71086d44381b7d81178ecc45f4989855", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1938, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/resetPassword" - }, - "response": { - "bodySize": 455, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 455, - "text": "{\"_id\":\"emailTemplate/resetPassword\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"

Click to reset your password

Password reset link

\",\"fr\":\"

Cliquez pour réinitialiser votre mot de passe

Mot de passe lien de réinitialisation

\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Reset your password\",\"fr\":\"Réinitialisez votre mot de passe\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "455" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.758Z", - "time": 318, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 318 - } - }, - { - "_id": "82e1f6e62e8145e19f78445f80160a4f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1939, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/updatePassword" - }, - "response": { - "bodySize": 943, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 943, - "text": "{\"_id\":\"emailTemplate/updatePassword\",\"defaultLocale\":\"en\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"

Verify email to update password

Update password link

\"},\"message\":{\"en\":\"

Verify email to update password

Update password link

\"},\"mimeType\":\"text/html\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"Update your password\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "943" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.761Z", - "time": 428, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 428 - } - }, - { - "_id": "76be78f43255ef6c7f0ec368787fd6fa", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1932, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/emailTemplate/welcome" - }, - "response": { - "bodySize": 839, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 839, - "text": "{\"_id\":\"emailTemplate/welcome\",\"defaultLocale\":\"en\",\"displayName\":\"Welcome\",\"enabled\":true,\"from\":\"\",\"html\":{\"en\":\"

Welcome. Your username is '{{object.userName}}'.

\"},\"message\":{\"en\":\"

Welcome. Your username is '{{object.userName}}'.

\"},\"mimeType\":\"text/html\",\"styles\":\"body{background-color:#324054;color:#5e6d82;padding:60px;text-align:center}a{text-decoration:none;color:#109cf1}.content{background-color:#fff;border-radius:4px;margin:0 auto;padding:48px;width:235px}\",\"subject\":{\"en\":\"Your account has been created\"},\"templateId\":\"welcome\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "839" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.763Z", - "time": 330, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 330 - } - }, - { - "_id": "31f3da351cfdb76989f5991f0a6ca455", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1919, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/entityId" - }, - "response": { - "bodySize": 372, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 372, - "text": "{\"_id\":\"entityId\",\"defaultLocale\":\"en\",\"displayName\":\"Frodo Test Email Template Three\",\"enabled\":true,\"from\":\"\",\"message\":{\"en\":\"

You started a login or profile update that requires MFA.

Click to Proceed

\"},\"mimeType\":\"text/html\",\"subject\":{\"en\":\"Multi-Factor Email for Identity Cloud login\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "372" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.766Z", - "time": 327, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 327 - } - }, - { - "_id": "37f8bed58ba1268148b2064a37062469", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1925, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/external.email" - }, - "response": { - "bodySize": 438, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 438, - "text": "{\"_id\":\"external.email\",\"auth\":{\"enable\":true,\"password\":\"&{aic.customer.sasl.pass}\",\"username\":\"&{aic.customer.sasl.user|donotuse@pingidentity.com}\"},\"connectiontimeout\":300000,\"debug\":false,\"from\":\"&{email.sender.address}\",\"host\":\"&{aic.smtp.relay.host|smtp-relay.fr-platform.svc.cluster.local}\",\"port\":25,\"smtpProperties\":[],\"ssl\":{\"enable\":false},\"starttls\":{\"enable\":false},\"threadPoolSize\":20,\"timeout\":300000,\"writetimeout\":300000}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "438" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.769Z", - "time": 459, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 459 - } - }, - { - "_id": "cb78ae83fb77e51c7cc7685726ad6783", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1932, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/external.emailDefault" - }, - "response": { - "bodySize": 445, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 445, - "text": "{\"_id\":\"external.emailDefault\",\"auth\":{\"enable\":true,\"password\":\"&{aic.customer.sasl.pass}\",\"username\":\"&{aic.customer.sasl.user|donotuse@pingidentity.com}\"},\"connectiontimeout\":300000,\"debug\":false,\"from\":\"&{email.sender.address}\",\"host\":\"&{aic.smtp.relay.host|smtp-relay.fr-platform.svc.cluster.local}\",\"port\":25,\"smtpProperties\":[],\"ssl\":{\"enable\":false},\"starttls\":{\"enable\":false},\"threadPoolSize\":20,\"timeout\":300000,\"writetimeout\":300000}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "445" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.771Z", - "time": 275, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 275 - } - }, - { - "_id": "a1cd55e0ea5ec77e1d555f48aeff85c5", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1934, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/fidc/federation-EntraID" - }, - "response": { - "bodySize": 59, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 59, - "text": "{\"code\":403,\"reason\":\"Forbidden\",\"message\":\"Access denied\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "59" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 615, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 403, - "statusText": "Forbidden" - }, - "startedDateTime": "2024-10-30T20:54:57.774Z", - "time": 307, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 307 - } - }, - { - "_id": "5a71c88390844dedbd982092bc0cdd9c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1933, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/fieldPolicy/alpha_user" - }, - "response": { - "bodySize": 888, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 888, - "text": "{\"_id\":\"fieldPolicy/alpha_user\",\"defaultPasswordStorageScheme\":[{\"_id\":\"PBKDF2-HMAC-SHA256\"}],\"passwordAttribute\":\"password\",\"resourceCollection\":\"managed/alpha_user\",\"type\":\"password-policy\",\"validator\":[{\"_id\":\"alpha_userPasswordPolicy-length-based-password-validator\",\"enabled\":true,\"maxPasswordLength\":0,\"minPasswordLength\":10,\"type\":\"length-based\"},{\"_id\":\"alpha_userPasswordPolicy-attribute-value-password-validator\",\"checkSubstrings\":true,\"enabled\":true,\"matchAttribute\":[\"mail\",\"userName\",\"givenName\",\"sn\"],\"minSubstringLength\":5,\"testReversedPassword\":true,\"type\":\"attribute-value\"},{\"_id\":\"alpha_userPasswordPolicy-character-set-password-validator\",\"allowUnclassifiedCharacters\":true,\"characterSet\":[\"0:abcdefghijklmnopqrstuvwxyz\",\"0:ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\"0:0123456789\",\"0:~!@#$%^&*()-_=+[]{}|;:,.<>/?\\\"'\\\\`\"],\"enabled\":true,\"minCharacterSets\":4,\"type\":\"character-set\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 671, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.777Z", - "time": 408, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 408 - } - }, - { - "_id": "65892d6a15cee40e8bca1f57a581b6c3", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1933, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/fieldPolicy/bravo_user" - }, - "response": { - "bodySize": 866, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 866, - "text": "{\"_id\":\"fieldPolicy/bravo_user\",\"defaultPasswordStorageScheme\":[{\"_id\":\"PBKDF2-HMAC-SHA256\"}],\"passwordAttribute\":\"password\",\"resourceCollection\":\"managed/bravo_user\",\"type\":\"password-policy\",\"validator\":[{\"_id\":\"bravo_userPasswordPolicy-length-based-password-validator\",\"enabled\":true,\"maxPasswordLength\":0,\"minPasswordLength\":8,\"type\":\"length-based\"},{\"_id\":\"bravo_userPasswordPolicy-attribute-value-password-validator\",\"checkSubstrings\":true,\"enabled\":true,\"matchAttribute\":[\"mail\",\"userName\",\"givenName\",\"sn\"],\"minSubstringLength\":5,\"testReversedPassword\":true,\"type\":\"attribute-value\"},{\"_id\":\"bravo_userPasswordPolicy-character-set-password-validator\",\"allowUnclassifiedCharacters\":true,\"characterSet\":[\"1:abcdefghijklmnopqrstuvwxyz\",\"1:ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\"1:0123456789\",\"1:~!@#$%^&*()-_=+[]{}|;:,.<>/?\\\"'\\\\`\"],\"enabled\":true,\"type\":\"character-set\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 671, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.779Z", - "time": 453, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 453 - } - }, - { - "_id": "b90c49fb8e97c6a49c1b99e8b28c3228", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1919, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/internal" - }, - "response": { - "bodySize": 270, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 270, - "text": "{\"_id\":\"internal\",\"objects\":[{\"name\":\"role\",\"properties\":{\"authzMembers\":{\"items\":{\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}]}}}}]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "270" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.783Z", - "time": 314, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 314 - } - }, - { - "_id": "a691ccd864d3d6bd4cec893c7df77b9c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1918, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/managed" - }, - "response": { - "bodySize": 93761, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 93761, - "text": "{\"_id\":\"managed\",\"objects\":[{\"lastSync\":{\"effectiveAssignmentsProperty\":\"effectiveAssignments\",\"lastSyncProperty\":\"lastSync\"},\"meta\":{\"property\":\"_meta\",\"resourceCollection\":\"managed/alpha_usermeta\",\"trackedProperties\":[\"createDate\",\"lastChanged\"]},\"name\":\"alpha_user\",\"notifications\":{},\"schema\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"icon\":\"fa-user\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User\",\"mat-icon\":\"people\",\"order\":[\"_id\",\"userName\",\"password\",\"givenName\",\"cn\",\"sn\",\"mail\",\"profileImage\",\"description\",\"accountStatus\",\"telephoneNumber\",\"postalAddress\",\"city\",\"postalCode\",\"country\",\"stateProvince\",\"roles\",\"assignments\",\"groups\",\"applications\",\"manager\",\"authzRoles\",\"reports\",\"effectiveRoles\",\"effectiveAssignments\",\"effectiveGroups\",\"effectiveApplications\",\"lastSync\",\"kbaInfo\",\"preferences\",\"consentedMappings\",\"ownerOfOrg\",\"adminOfOrg\",\"memberOfOrg\",\"memberOfOrgIDs\",\"ownerOfApp\",\"frIndexedString1\",\"frIndexedString2\",\"frIndexedString3\",\"frIndexedString4\",\"frIndexedString5\",\"frUnindexedString1\",\"frUnindexedString2\",\"frUnindexedString3\",\"frUnindexedString4\",\"frUnindexedString5\",\"frIndexedMultivalued1\",\"frIndexedMultivalued2\",\"frIndexedMultivalued3\",\"frIndexedMultivalued4\",\"frIndexedMultivalued5\",\"frUnindexedMultivalued1\",\"frUnindexedMultivalued2\",\"frUnindexedMultivalued3\",\"frUnindexedMultivalued4\",\"frUnindexedMultivalued5\",\"frIndexedDate1\",\"frIndexedDate2\",\"frIndexedDate3\",\"frIndexedDate4\",\"frIndexedDate5\",\"frUnindexedDate1\",\"frUnindexedDate2\",\"frUnindexedDate3\",\"frUnindexedDate4\",\"frUnindexedDate5\",\"frIndexedInteger1\",\"frIndexedInteger2\",\"frIndexedInteger3\",\"frIndexedInteger4\",\"frIndexedInteger5\",\"frUnindexedInteger1\",\"frUnindexedInteger2\",\"frUnindexedInteger3\",\"frUnindexedInteger4\",\"frUnindexedInteger5\",\"assignedDashboard\"],\"properties\":{\"_id\":{\"description\":\"User ID\",\"isPersonal\":false,\"policies\":[{\"params\":{\"forbiddenChars\":[\"/\"]},\"policyId\":\"cannot-contain-characters\"}],\"searchable\":false,\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":false},\"accountStatus\":{\"default\":\"active\",\"description\":\"Status\",\"isPersonal\":false,\"searchable\":true,\"title\":\"Status\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"adminOfOrg\":{\"items\":{\"notifySelf\":false,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":true,\"path\":\"managed/alpha_organization\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"admins\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Organizations I Administer\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"aliasList\":{\"description\":\"List of identity aliases used primarily to record social IdP subjects for this user\",\"isVirtual\":false,\"items\":{\"title\":\"User Alias Names Items\",\"type\":\"string\"},\"returnByDefault\":false,\"searchable\":false,\"title\":\"User Alias Names List\",\"type\":\"array\",\"userEditable\":true,\"viewable\":false},\"applications\":{\"description\":\"Applications\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:applications\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:applications:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Groups Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Application\",\"path\":\"managed/alpha_application\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[\"name\"]}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Groups Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Applications\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":false},\"assignedDashboard\":{\"description\":\"List of items to click on for this user\",\"isVirtual\":true,\"items\":{\"title\":\"Assigned Dashboard Items\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"name\"],\"referencedRelationshipFields\":[[\"roles\",\"applications\"],[\"applications\"]]},\"searchable\":false,\"title\":\"Assigned Dashboard\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"assignments\":{\"description\":\"Assignments\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Provisioning Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Assignment\",\"path\":\"managed/alpha_assignment\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Assignments Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Assignments\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"authzRoles\":{\"description\":\"Authorization Roles\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Authorization Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Internal Role\",\"path\":\"internal/role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"authzMembers\",\"reverseRelationship\":true,\"title\":\"Authorization Roles Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Authorization Roles\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"city\":{\"description\":\"City\",\"isPersonal\":false,\"title\":\"City\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"cn\":{\"default\":\"{{givenName}} {{sn}}\",\"description\":\"Common Name\",\"isPersonal\":true,\"scope\":\"private\",\"searchable\":false,\"title\":\"Common Name\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"consentedMappings\":{\"description\":\"Consented Mappings\",\"isPersonal\":false,\"isVirtual\":false,\"items\":{\"items\":{\"order\":[\"mapping\",\"consentDate\"],\"properties\":{\"consentDate\":{\"description\":\"Consent Date\",\"searchable\":true,\"title\":\"Consent Date\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"mapping\":{\"description\":\"Mapping\",\"searchable\":true,\"title\":\"Mapping\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true}},\"required\":[\"mapping\",\"consentDate\"],\"title\":\"Consented Mappings Item\",\"type\":\"object\"},\"title\":\"Consented Mappings Items\",\"type\":\"array\"},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Consented Mappings\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"country\":{\"description\":\"Country\",\"isPersonal\":false,\"title\":\"Country\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"description\":{\"description\":\"Description\",\"isPersonal\":false,\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"effectiveApplications\":{\"description\":\"Effective Applications\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Assigned Application Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedObjectFields\":[\"name\"],\"referencedRelationshipFields\":[[\"roles\",\"applications\"],[\"applications\"]]},\"returnByDefault\":true,\"title\":\"Effective Applications\",\"type\":\"array\",\"viewable\":false},\"effectiveAssignments\":{\"description\":\"Effective Assignments\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Assignments Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedObjectFields\":[\"*\"],\"referencedRelationshipFields\":[[\"roles\",\"assignments\"],[\"assignments\"]]},\"returnByDefault\":true,\"title\":\"Effective Assignments\",\"type\":\"array\",\"usageDescription\":\"\",\"viewable\":false},\"effectiveGroups\":{\"description\":\"Effective Groups\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Groups Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedRelationshipFields\":[\"groups\"]},\"returnByDefault\":true,\"title\":\"Effective Groups\",\"type\":\"array\",\"usageDescription\":\"\",\"viewable\":false},\"effectiveRoles\":{\"description\":\"Effective Roles\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Roles Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedRelationshipFields\":[\"roles\"]},\"returnByDefault\":true,\"title\":\"Effective Roles\",\"type\":\"array\",\"usageDescription\":\"\",\"viewable\":false},\"frIndexedDate1\":{\"description\":\"Generic Indexed Date 1\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate2\":{\"description\":\"Generic Indexed Date 2\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate3\":{\"description\":\"Generic Indexed Date 3\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate4\":{\"description\":\"Generic Indexed Date 4\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate5\":{\"description\":\"Generic Indexed Date 5\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger1\":{\"description\":\"Generic Indexed Integer 1\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 1\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger2\":{\"description\":\"Generic Indexed Integer 2\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 2\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger3\":{\"description\":\"Generic Indexed Integer 3\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 3\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger4\":{\"description\":\"Generic Indexed Integer 4\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 4\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger5\":{\"description\":\"Generic Indexed Integer 5\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 5\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued1\":{\"description\":\"Generic Indexed Multivalue 1\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 1\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued2\":{\"description\":\"Generic Indexed Multivalue 2\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 2\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued3\":{\"description\":\"Generic Indexed Multivalue 3\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 3\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued4\":{\"description\":\"Generic Indexed Multivalue 4\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 4\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued5\":{\"description\":\"Generic Indexed Multivalue 5\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 5\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString1\":{\"description\":\"Generic Indexed String 1\",\"isPersonal\":false,\"title\":\"Generic Indexed String 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString2\":{\"description\":\"Generic Indexed String 2\",\"isPersonal\":false,\"title\":\"Generic Indexed String 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString3\":{\"description\":\"Generic Indexed String 3\",\"isPersonal\":false,\"title\":\"Generic Indexed String 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString4\":{\"description\":\"Generic Indexed String 4\",\"isPersonal\":false,\"title\":\"Generic Indexed String 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString5\":{\"description\":\"Generic Indexed String 5\",\"isPersonal\":false,\"title\":\"Generic Indexed String 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate1\":{\"description\":\"Generic Unindexed Date 1\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate2\":{\"description\":\"Generic Unindexed Date 2\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate3\":{\"description\":\"Generic Unindexed Date 3\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate4\":{\"description\":\"Generic Unindexed Date 4\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate5\":{\"description\":\"Generic Unindexed Date 5\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger1\":{\"description\":\"Generic Unindexed Integer 1\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 1\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger2\":{\"description\":\"Generic Unindexed Integer 2\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 2\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger3\":{\"description\":\"Generic Unindexed Integer 3\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 3\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger4\":{\"description\":\"Generic Unindexed Integer 4\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 4\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger5\":{\"description\":\"Generic Unindexed Integer 5\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 5\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued1\":{\"description\":\"Generic Unindexed Multivalue 1\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 1\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued2\":{\"description\":\"Generic Unindexed Multivalue 2\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 2\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued3\":{\"description\":\"Generic Unindexed Multivalue 3\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 3\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued4\":{\"description\":\"Generic Unindexed Multivalue 4\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 4\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued5\":{\"description\":\"Generic Unindexed Multivalue 5\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 5\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString1\":{\"description\":\"Generic Unindexed String 1\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString2\":{\"description\":\"Generic Unindexed String 2\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString3\":{\"description\":\"Generic Unindexed String 3\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString4\":{\"description\":\"Generic Unindexed String 4\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString5\":{\"description\":\"Generic Unindexed String 5\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"givenName\":{\"description\":\"First Name\",\"isPersonal\":true,\"searchable\":true,\"title\":\"First Name\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"groups\":{\"description\":\"Groups\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:groups\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:groups:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Groups Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Group\",\"path\":\"managed/alpha_group\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Groups Items\",\"type\":\"relationship\",\"validate\":true},\"relationshipGrantTemporalConstraintsEnforced\":false,\"returnByDefault\":false,\"title\":\"Groups\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"kbaInfo\":{\"description\":\"KBA Info\",\"isPersonal\":true,\"items\":{\"order\":[\"answer\",\"customQuestion\",\"questionId\"],\"properties\":{\"answer\":{\"description\":\"Answer\",\"type\":\"string\"},\"customQuestion\":{\"description\":\"Custom question\",\"type\":\"string\"},\"questionId\":{\"description\":\"Question ID\",\"type\":\"string\"}},\"required\":[],\"title\":\"KBA Info Items\",\"type\":\"object\"},\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"lastSync\":{\"description\":\"Last Sync timestamp\",\"isPersonal\":false,\"order\":[\"effectiveAssignments\",\"timestamp\"],\"properties\":{\"effectiveAssignments\":{\"description\":\"Effective Assignments\",\"items\":{\"title\":\"Effective Assignments Items\",\"type\":\"object\"},\"title\":\"Effective Assignments\",\"type\":\"array\"},\"timestamp\":{\"description\":\"Timestamp\",\"type\":\"string\"}},\"required\":[],\"scope\":\"private\",\"searchable\":false,\"title\":\"Last Sync timestamp\",\"type\":\"object\",\"usageDescription\":\"\",\"viewable\":false},\"mail\":{\"description\":\"Email Address\",\"isPersonal\":true,\"policies\":[{\"policyId\":\"valid-email-address-format\"}],\"searchable\":true,\"title\":\"Email Address\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"manager\":{\"description\":\"Manager\",\"isPersonal\":false,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Manager _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"reports\",\"reverseRelationship\":true,\"searchable\":false,\"title\":\"Manager\",\"type\":\"relationship\",\"usageDescription\":\"\",\"userEditable\":false,\"validate\":true,\"viewable\":true},\"memberOfOrg\":{\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":false,\"path\":\"managed/alpha_organization\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Organizations to which I Belong\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"memberOfOrgIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"org identifiers\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\",\"parentIDs\"],\"referencedRelationshipFields\":[\"memberOfOrg\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"MemberOfOrgIDs\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"ownerOfApp\":{\"items\":{\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Application\",\"path\":\"managed/alpha_application\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[\"name\"]}}],\"reversePropertyName\":\"owners\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Applications I Own\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"ownerOfOrg\":{\"items\":{\"notifySelf\":false,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":true,\"path\":\"managed/alpha_organization\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"owners\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Organizations I Own\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"password\":{\"description\":\"Password\",\"isPersonal\":false,\"isProtected\":true,\"scope\":\"private\",\"searchable\":false,\"title\":\"Password\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"postalAddress\":{\"description\":\"Address 1\",\"isPersonal\":true,\"title\":\"Address 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"postalCode\":{\"description\":\"Postal Code\",\"isPersonal\":false,\"title\":\"Postal Code\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"preferences\":{\"description\":\"Preferences\",\"isPersonal\":false,\"order\":[\"updates\",\"marketing\"],\"properties\":{\"marketing\":{\"description\":\"Send me special offers and services\",\"type\":\"boolean\"},\"updates\":{\"description\":\"Send me news and updates\",\"type\":\"boolean\"}},\"required\":[],\"searchable\":false,\"title\":\"Preferences\",\"type\":\"object\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"profileImage\":{\"description\":\"Profile Image\",\"isPersonal\":true,\"searchable\":true,\"title\":\"Profile Image\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"reports\":{\"description\":\"Direct Reports\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Direct Reports Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"manager\",\"reverseRelationship\":true,\"title\":\"Direct Reports Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Direct Reports\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"roles\":{\"description\":\"Provisioning Roles\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:roles\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Provisioning Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Role\",\"path\":\"managed/alpha_role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Provisioning Roles Items\",\"type\":\"relationship\",\"validate\":true},\"relationshipGrantTemporalConstraintsEnforced\":true,\"returnByDefault\":false,\"title\":\"Provisioning Roles\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"sn\":{\"description\":\"Last Name\",\"isPersonal\":true,\"searchable\":true,\"title\":\"Last Name\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"stateProvince\":{\"description\":\"State/Province\",\"isPersonal\":false,\"title\":\"State/Province\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"telephoneNumber\":{\"description\":\"Telephone Number\",\"isPersonal\":true,\"pattern\":\"^\\\\+?([0-9\\\\- \\\\(\\\\)])*$\",\"title\":\"Telephone Number\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"userName\":{\"description\":\"Username\",\"isPersonal\":true,\"minLength\":1,\"policies\":[{\"policyId\":\"valid-username\"},{\"params\":{\"forbiddenChars\":[\"/\"]},\"policyId\":\"cannot-contain-characters\"},{\"params\":{\"minLength\":1},\"policyId\":\"minimum-length\"},{\"params\":{\"maxLength\":255},\"policyId\":\"maximum-length\"}],\"searchable\":true,\"title\":\"Username\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true}},\"required\":[\"userName\",\"givenName\",\"sn\",\"mail\"],\"title\":\"Alpha realm - User\",\"type\":\"object\",\"viewable\":true}},{\"lastSync\":{\"effectiveAssignmentsProperty\":\"effectiveAssignments\",\"lastSyncProperty\":\"lastSync\"},\"meta\":{\"property\":\"_meta\",\"resourceCollection\":\"managed/bravo_usermeta\",\"trackedProperties\":[\"createDate\",\"lastChanged\"]},\"name\":\"bravo_user\",\"notifications\":{},\"schema\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"icon\":\"fa-user\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User\",\"mat-icon\":\"people\",\"order\":[\"_id\",\"userName\",\"password\",\"givenName\",\"cn\",\"sn\",\"mail\",\"profileImage\",\"description\",\"accountStatus\",\"telephoneNumber\",\"postalAddress\",\"city\",\"postalCode\",\"country\",\"stateProvince\",\"roles\",\"assignments\",\"groups\",\"applications\",\"manager\",\"authzRoles\",\"reports\",\"effectiveRoles\",\"effectiveAssignments\",\"effectiveGroups\",\"effectiveApplications\",\"lastSync\",\"kbaInfo\",\"preferences\",\"consentedMappings\",\"ownerOfOrg\",\"adminOfOrg\",\"memberOfOrg\",\"memberOfOrgIDs\",\"ownerOfApp\",\"frIndexedString1\",\"frIndexedString2\",\"frIndexedString3\",\"frIndexedString4\",\"frIndexedString5\",\"frUnindexedString1\",\"frUnindexedString2\",\"frUnindexedString3\",\"frUnindexedString4\",\"frUnindexedString5\",\"frIndexedMultivalued1\",\"frIndexedMultivalued2\",\"frIndexedMultivalued3\",\"frIndexedMultivalued4\",\"frIndexedMultivalued5\",\"frUnindexedMultivalued1\",\"frUnindexedMultivalued2\",\"frUnindexedMultivalued3\",\"frUnindexedMultivalued4\",\"frUnindexedMultivalued5\",\"frIndexedDate1\",\"frIndexedDate2\",\"frIndexedDate3\",\"frIndexedDate4\",\"frIndexedDate5\",\"frUnindexedDate1\",\"frUnindexedDate2\",\"frUnindexedDate3\",\"frUnindexedDate4\",\"frUnindexedDate5\",\"frIndexedInteger1\",\"frIndexedInteger2\",\"frIndexedInteger3\",\"frIndexedInteger4\",\"frIndexedInteger5\",\"frUnindexedInteger1\",\"frUnindexedInteger2\",\"frUnindexedInteger3\",\"frUnindexedInteger4\",\"frUnindexedInteger5\",\"assignedDashboard\"],\"properties\":{\"_id\":{\"description\":\"User ID\",\"isPersonal\":false,\"policies\":[{\"params\":{\"forbiddenChars\":[\"/\"]},\"policyId\":\"cannot-contain-characters\"}],\"searchable\":false,\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":false},\"accountStatus\":{\"default\":\"active\",\"description\":\"Status\",\"isPersonal\":false,\"searchable\":true,\"title\":\"Status\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"adminOfOrg\":{\"items\":{\"notifySelf\":false,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":true,\"path\":\"managed/bravo_organization\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"admins\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Organizations I Administer\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"aliasList\":{\"description\":\"List of identity aliases used primarily to record social IdP subjects for this user\",\"isVirtual\":false,\"items\":{\"title\":\"User Alias Names Items\",\"type\":\"string\"},\"returnByDefault\":false,\"searchable\":false,\"title\":\"User Alias Names List\",\"type\":\"array\",\"userEditable\":true,\"viewable\":false},\"applications\":{\"description\":\"Applications\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:applications\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:applications:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Groups Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Application\",\"path\":\"managed/bravo_application\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[\"name\"]}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Groups Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Applications\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":false},\"assignedDashboard\":{\"description\":\"List of items to click on for this user\",\"isVirtual\":true,\"items\":{\"title\":\"Assigned Dashboard Items\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"name\"],\"referencedRelationshipFields\":[[\"roles\",\"applications\"],[\"applications\"]]},\"searchable\":false,\"title\":\"Assigned Dashboard\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"assignments\":{\"description\":\"Assignments\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:assignments:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Provisioning Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Assignment\",\"path\":\"managed/bravo_assignment\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Assignments Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Assignments\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"authzRoles\":{\"description\":\"Authorization Roles\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:authzRoles:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Authorization Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Internal Role\",\"path\":\"internal/role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"authzMembers\",\"reverseRelationship\":true,\"title\":\"Authorization Roles Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Authorization Roles\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"city\":{\"description\":\"City\",\"isPersonal\":false,\"title\":\"City\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"cn\":{\"default\":\"{{givenName}} {{sn}}\",\"description\":\"Common Name\",\"isPersonal\":true,\"scope\":\"private\",\"searchable\":false,\"title\":\"Common Name\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"consentedMappings\":{\"description\":\"Consented Mappings\",\"isPersonal\":false,\"isVirtual\":false,\"items\":{\"items\":{\"order\":[\"mapping\",\"consentDate\"],\"properties\":{\"consentDate\":{\"description\":\"Consent Date\",\"searchable\":true,\"title\":\"Consent Date\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"mapping\":{\"description\":\"Mapping\",\"searchable\":true,\"title\":\"Mapping\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true}},\"required\":[\"mapping\",\"consentDate\"],\"title\":\"Consented Mappings Item\",\"type\":\"object\"},\"title\":\"Consented Mappings Items\",\"type\":\"array\"},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Consented Mappings\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"country\":{\"description\":\"Country\",\"isPersonal\":false,\"title\":\"Country\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"description\":{\"description\":\"Description\",\"isPersonal\":false,\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"effectiveApplications\":{\"description\":\"Effective Applications\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Assigned Application Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedObjectFields\":[\"name\"],\"referencedRelationshipFields\":[[\"roles\",\"applications\"],[\"applications\"]]},\"returnByDefault\":true,\"title\":\"Effective Applications\",\"type\":\"array\",\"viewable\":false},\"effectiveAssignments\":{\"description\":\"Effective Assignments\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Assignments Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedObjectFields\":[\"*\"],\"referencedRelationshipFields\":[[\"roles\",\"assignments\"],[\"assignments\"]]},\"returnByDefault\":true,\"title\":\"Effective Assignments\",\"type\":\"array\",\"usageDescription\":\"\",\"viewable\":false},\"effectiveGroups\":{\"description\":\"Effective Groups\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Groups Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedRelationshipFields\":[\"groups\"]},\"returnByDefault\":true,\"title\":\"Effective Groups\",\"type\":\"array\",\"usageDescription\":\"\",\"viewable\":false},\"effectiveRoles\":{\"description\":\"Effective Roles\",\"isPersonal\":false,\"isVirtual\":true,\"items\":{\"title\":\"Effective Roles Items\",\"type\":\"object\"},\"queryConfig\":{\"referencedRelationshipFields\":[\"roles\"]},\"returnByDefault\":true,\"title\":\"Effective Roles\",\"type\":\"array\",\"usageDescription\":\"\",\"viewable\":false},\"frIndexedDate1\":{\"description\":\"Generic Indexed Date 1\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate2\":{\"description\":\"Generic Indexed Date 2\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate3\":{\"description\":\"Generic Indexed Date 3\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate4\":{\"description\":\"Generic Indexed Date 4\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedDate5\":{\"description\":\"Generic Indexed Date 5\",\"isPersonal\":false,\"title\":\"Generic Indexed Date 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger1\":{\"description\":\"Generic Indexed Integer 1\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 1\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger2\":{\"description\":\"Generic Indexed Integer 2\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 2\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger3\":{\"description\":\"Generic Indexed Integer 3\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 3\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger4\":{\"description\":\"Generic Indexed Integer 4\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 4\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedInteger5\":{\"description\":\"Generic Indexed Integer 5\",\"isPersonal\":false,\"title\":\"Generic Indexed Integer 5\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued1\":{\"description\":\"Generic Indexed Multivalue 1\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 1\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued2\":{\"description\":\"Generic Indexed Multivalue 2\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 2\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued3\":{\"description\":\"Generic Indexed Multivalue 3\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 3\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued4\":{\"description\":\"Generic Indexed Multivalue 4\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 4\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedMultivalued5\":{\"description\":\"Generic Indexed Multivalue 5\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Indexed Multivalue 5\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString1\":{\"description\":\"Generic Indexed String 1\",\"isPersonal\":false,\"title\":\"Generic Indexed String 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString2\":{\"description\":\"Generic Indexed String 2\",\"isPersonal\":false,\"title\":\"Generic Indexed String 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString3\":{\"description\":\"Generic Indexed String 3\",\"isPersonal\":false,\"title\":\"Generic Indexed String 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString4\":{\"description\":\"Generic Indexed String 4\",\"isPersonal\":false,\"title\":\"Generic Indexed String 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frIndexedString5\":{\"description\":\"Generic Indexed String 5\",\"isPersonal\":false,\"title\":\"Generic Indexed String 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate1\":{\"description\":\"Generic Unindexed Date 1\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate2\":{\"description\":\"Generic Unindexed Date 2\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate3\":{\"description\":\"Generic Unindexed Date 3\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate4\":{\"description\":\"Generic Unindexed Date 4\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedDate5\":{\"description\":\"Generic Unindexed Date 5\",\"isPersonal\":false,\"title\":\"Generic Unindexed Date 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger1\":{\"description\":\"Generic Unindexed Integer 1\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 1\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger2\":{\"description\":\"Generic Unindexed Integer 2\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 2\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger3\":{\"description\":\"Generic Unindexed Integer 3\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 3\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger4\":{\"description\":\"Generic Unindexed Integer 4\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 4\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedInteger5\":{\"description\":\"Generic Unindexed Integer 5\",\"isPersonal\":false,\"title\":\"Generic Unindexed Integer 5\",\"type\":\"number\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued1\":{\"description\":\"Generic Unindexed Multivalue 1\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 1\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued2\":{\"description\":\"Generic Unindexed Multivalue 2\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 2\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued3\":{\"description\":\"Generic Unindexed Multivalue 3\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 3\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued4\":{\"description\":\"Generic Unindexed Multivalue 4\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 4\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedMultivalued5\":{\"description\":\"Generic Unindexed Multivalue 5\",\"isPersonal\":false,\"items\":{\"type\":\"string\"},\"title\":\"Generic Unindexed Multivalue 5\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString1\":{\"description\":\"Generic Unindexed String 1\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString2\":{\"description\":\"Generic Unindexed String 2\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 2\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString3\":{\"description\":\"Generic Unindexed String 3\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 3\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString4\":{\"description\":\"Generic Unindexed String 4\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 4\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"frUnindexedString5\":{\"description\":\"Generic Unindexed String 5\",\"isPersonal\":false,\"title\":\"Generic Unindexed String 5\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"givenName\":{\"description\":\"First Name\",\"isPersonal\":true,\"searchable\":true,\"title\":\"First Name\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"groups\":{\"description\":\"Groups\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:groups\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:groups:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Groups Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Group\",\"path\":\"managed/bravo_group\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Groups Items\",\"type\":\"relationship\",\"validate\":true},\"relationshipGrantTemporalConstraintsEnforced\":false,\"returnByDefault\":false,\"title\":\"Groups\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"kbaInfo\":{\"description\":\"KBA Info\",\"isPersonal\":true,\"items\":{\"order\":[\"answer\",\"customQuestion\",\"questionId\"],\"properties\":{\"answer\":{\"description\":\"Answer\",\"type\":\"string\"},\"customQuestion\":{\"description\":\"Custom question\",\"type\":\"string\"},\"questionId\":{\"description\":\"Question ID\",\"type\":\"string\"}},\"required\":[],\"title\":\"KBA Info Items\",\"type\":\"object\"},\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"lastSync\":{\"description\":\"Last Sync timestamp\",\"isPersonal\":false,\"order\":[\"effectiveAssignments\",\"timestamp\"],\"properties\":{\"effectiveAssignments\":{\"description\":\"Effective Assignments\",\"items\":{\"title\":\"Effective Assignments Items\",\"type\":\"object\"},\"title\":\"Effective Assignments\",\"type\":\"array\"},\"timestamp\":{\"description\":\"Timestamp\",\"type\":\"string\"}},\"required\":[],\"scope\":\"private\",\"searchable\":false,\"title\":\"Last Sync timestamp\",\"type\":\"object\",\"usageDescription\":\"\",\"viewable\":false},\"mail\":{\"description\":\"Email Address\",\"isPersonal\":true,\"policies\":[{\"policyId\":\"valid-email-address-format\"}],\"searchable\":true,\"title\":\"Email Address\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"manager\":{\"description\":\"Manager\",\"isPersonal\":false,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Manager _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"reports\",\"reverseRelationship\":true,\"searchable\":false,\"title\":\"Manager\",\"type\":\"relationship\",\"usageDescription\":\"\",\"userEditable\":false,\"validate\":true,\"viewable\":true},\"memberOfOrg\":{\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":false,\"path\":\"managed/bravo_organization\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Organizations to which I Belong\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"memberOfOrgIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"org identifiers\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\",\"parentIDs\"],\"referencedRelationshipFields\":[\"memberOfOrg\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"MemberOfOrgIDs\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"ownerOfApp\":{\"items\":{\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Application\",\"path\":\"managed/bravo_application\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[\"name\"]}}],\"reversePropertyName\":\"owners\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Applications I Own\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"ownerOfOrg\":{\"items\":{\"notifySelf\":false,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":true,\"path\":\"managed/bravo_organization\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"owners\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Organizations I Own\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"password\":{\"description\":\"Password\",\"isPersonal\":false,\"isProtected\":true,\"scope\":\"private\",\"searchable\":false,\"title\":\"Password\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"postalAddress\":{\"description\":\"Address 1\",\"isPersonal\":true,\"title\":\"Address 1\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"postalCode\":{\"description\":\"Postal Code\",\"isPersonal\":false,\"title\":\"Postal Code\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"preferences\":{\"description\":\"Preferences\",\"isPersonal\":false,\"order\":[\"updates\",\"marketing\"],\"properties\":{\"marketing\":{\"description\":\"Send me special offers and services\",\"type\":\"boolean\"},\"updates\":{\"description\":\"Send me news and updates\",\"type\":\"boolean\"}},\"required\":[],\"searchable\":false,\"title\":\"Preferences\",\"type\":\"object\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"profileImage\":{\"description\":\"Profile Image\",\"isPersonal\":true,\"searchable\":true,\"title\":\"Profile Image\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":false},\"reports\":{\"description\":\"Direct Reports\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:reports:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Direct Reports Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"manager\",\"reverseRelationship\":true,\"title\":\"Direct Reports Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Direct Reports\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"roles\":{\"description\":\"Provisioning Roles\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:roles\",\"isPersonal\":false,\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:User:roles:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Provisioning Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociationField\":\"condition\",\"label\":\"Role\",\"path\":\"managed/bravo_role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"members\",\"reverseRelationship\":true,\"title\":\"Provisioning Roles Items\",\"type\":\"relationship\",\"validate\":true},\"relationshipGrantTemporalConstraintsEnforced\":true,\"returnByDefault\":false,\"title\":\"Provisioning Roles\",\"type\":\"array\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":true},\"sn\":{\"description\":\"Last Name\",\"isPersonal\":true,\"searchable\":true,\"title\":\"Last Name\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"stateProvince\":{\"description\":\"State/Province\",\"isPersonal\":false,\"title\":\"State/Province\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"telephoneNumber\":{\"description\":\"Telephone Number\",\"isPersonal\":true,\"pattern\":\"^\\\\+?([0-9\\\\- \\\\(\\\\)])*$\",\"title\":\"Telephone Number\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true},\"userName\":{\"description\":\"Username\",\"isPersonal\":true,\"minLength\":1,\"policies\":[{\"policyId\":\"valid-username\"},{\"params\":{\"forbiddenChars\":[\"/\"]},\"policyId\":\"cannot-contain-characters\"},{\"params\":{\"minLength\":1},\"policyId\":\"minimum-length\"},{\"params\":{\"maxLength\":255},\"policyId\":\"maximum-length\"}],\"searchable\":true,\"title\":\"Username\",\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":true,\"viewable\":true}},\"required\":[\"userName\",\"givenName\",\"sn\",\"mail\"],\"title\":\"Bravo realm - User\",\"type\":\"object\",\"viewable\":true}},{\"name\":\"alpha_role\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"\",\"icon\":\"fa-check-square-o\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role\",\"mat-icon\":\"assignment_ind\",\"order\":[\"_id\",\"name\",\"description\",\"members\",\"assignments\",\"applications\",\"condition\",\"temporalConstraints\"],\"properties\":{\"_id\":{\"description\":\"Role ID\",\"searchable\":false,\"title\":\"Name\",\"type\":\"string\",\"viewable\":false},\"applications\":{\"description\":\"Role Applications\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role:applications:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Role Application Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Application\",\"path\":\"managed/alpha_application\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"roles\",\"reverseRelationship\":true,\"title\":\"Role Application Items\",\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"members\"],\"relationshipGrantTemporalConstraintsEnforced\":true,\"returnByDefault\":false,\"title\":\"Applications\",\"type\":\"array\",\"viewable\":false},\"assignments\":{\"description\":\"Managed Assignments\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Managed Assignments Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Assignment\",\"path\":\"managed/alpha_assignment\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"roles\",\"reverseRelationship\":true,\"title\":\"Managed Assignments Items\",\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"members\"],\"returnByDefault\":false,\"title\":\"Managed Assignments\",\"type\":\"array\",\"viewable\":true},\"condition\":{\"description\":\"A conditional filter for this role\",\"isConditional\":true,\"searchable\":false,\"title\":\"Condition\",\"type\":\"string\",\"viewable\":false},\"description\":{\"description\":\"The role description, used for display purposes.\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"viewable\":true},\"members\":{\"description\":\"Role Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Role Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"roles\",\"reverseRelationship\":true,\"title\":\"Role Members Items\",\"type\":\"relationship\",\"validate\":true},\"relationshipGrantTemporalConstraintsEnforced\":true,\"returnByDefault\":false,\"title\":\"Role Members\",\"type\":\"array\",\"viewable\":true},\"name\":{\"description\":\"The role name, used for display purposes.\",\"policies\":[{\"policyId\":\"unique\"}],\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"viewable\":true},\"temporalConstraints\":{\"description\":\"An array of temporal constraints for a role\",\"isTemporalConstraint\":true,\"items\":{\"order\":[\"duration\"],\"properties\":{\"duration\":{\"description\":\"Duration\",\"type\":\"string\"}},\"required\":[\"duration\"],\"title\":\"Temporal Constraints Items\",\"type\":\"object\"},\"notifyRelationships\":[\"members\"],\"returnByDefault\":true,\"title\":\"Temporal Constraints\",\"type\":\"array\",\"viewable\":false}},\"required\":[\"name\"],\"title\":\"Alpha realm - Role\",\"type\":\"object\"}},{\"name\":\"bravo_role\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"\",\"icon\":\"fa-check-square-o\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role\",\"mat-icon\":\"assignment_ind\",\"order\":[\"_id\",\"name\",\"description\",\"members\",\"assignments\",\"applications\",\"condition\",\"temporalConstraints\"],\"properties\":{\"_id\":{\"description\":\"Role ID\",\"searchable\":false,\"title\":\"Name\",\"type\":\"string\",\"viewable\":false},\"applications\":{\"description\":\"Role Applications\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role:applications:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Role Application Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Application\",\"path\":\"managed/bravo_application\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"roles\",\"reverseRelationship\":true,\"title\":\"Role Application Items\",\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"members\"],\"relationshipGrantTemporalConstraintsEnforced\":true,\"returnByDefault\":false,\"title\":\"Applications\",\"type\":\"array\",\"viewable\":false},\"assignments\":{\"description\":\"Managed Assignments\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role:assignments:items\",\"notifySelf\":true,\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Managed Assignments Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Assignment\",\"path\":\"managed/bravo_assignment\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"roles\",\"reverseRelationship\":true,\"title\":\"Managed Assignments Items\",\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"members\"],\"returnByDefault\":false,\"title\":\"Managed Assignments\",\"type\":\"array\",\"viewable\":true},\"condition\":{\"description\":\"A conditional filter for this role\",\"isConditional\":true,\"searchable\":false,\"title\":\"Condition\",\"type\":\"string\",\"viewable\":false},\"description\":{\"description\":\"The role description, used for display purposes.\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"viewable\":true},\"members\":{\"description\":\"Role Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Role:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Role Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"roles\",\"reverseRelationship\":true,\"title\":\"Role Members Items\",\"type\":\"relationship\",\"validate\":true},\"relationshipGrantTemporalConstraintsEnforced\":true,\"returnByDefault\":false,\"title\":\"Role Members\",\"type\":\"array\",\"viewable\":true},\"name\":{\"description\":\"The role name, used for display purposes.\",\"policies\":[{\"policyId\":\"unique\"}],\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"viewable\":true},\"temporalConstraints\":{\"description\":\"An array of temporal constraints for a role\",\"isTemporalConstraint\":true,\"items\":{\"order\":[\"duration\"],\"properties\":{\"duration\":{\"description\":\"Duration\",\"type\":\"string\"}},\"required\":[\"duration\"],\"title\":\"Temporal Constraints Items\",\"type\":\"object\"},\"notifyRelationships\":[\"members\"],\"returnByDefault\":true,\"title\":\"Temporal Constraints\",\"type\":\"array\",\"viewable\":false}},\"required\":[\"name\"],\"title\":\"Bravo realm - Role\",\"type\":\"object\"}},{\"attributeEncryption\":{},\"name\":\"alpha_assignment\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"A role assignment\",\"icon\":\"fa-key\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Assignment\",\"mat-icon\":\"vpn_key\",\"order\":[\"_id\",\"name\",\"description\",\"type\",\"mapping\",\"attributes\",\"linkQualifiers\",\"roles\",\"members\",\"condition\",\"weight\"],\"properties\":{\"_id\":{\"description\":\"The assignment ID\",\"searchable\":false,\"title\":\"Name\",\"type\":\"string\",\"viewable\":false},\"attributes\":{\"description\":\"The attributes operated on by this assignment.\",\"items\":{\"order\":[\"assignmentOperation\",\"unassignmentOperation\",\"name\",\"value\"],\"properties\":{\"assignmentOperation\":{\"description\":\"Assignment operation\",\"type\":\"string\"},\"name\":{\"description\":\"Name\",\"type\":\"string\"},\"unassignmentOperation\":{\"description\":\"Unassignment operation\",\"type\":\"string\"},\"value\":{\"description\":\"Value\",\"type\":\"string\"}},\"required\":[],\"title\":\"Assignment Attributes Items\",\"type\":\"object\"},\"notifyRelationships\":[\"roles\",\"members\"],\"title\":\"Assignment Attributes\",\"type\":\"array\",\"viewable\":true},\"condition\":{\"description\":\"A conditional filter for this assignment\",\"isConditional\":true,\"searchable\":false,\"title\":\"Condition\",\"type\":\"string\",\"viewable\":false},\"description\":{\"description\":\"The assignment description, used for display purposes.\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"viewable\":true},\"linkQualifiers\":{\"description\":\"Conditional link qualifiers to restrict this assignment to.\",\"items\":{\"title\":\"Link Qualifiers Items\",\"type\":\"string\"},\"title\":\"Link Qualifiers\",\"type\":\"array\",\"viewable\":true},\"mapping\":{\"description\":\"The name of the mapping this assignment applies to\",\"policies\":[{\"policyId\":\"mapping-exists\"}],\"searchable\":true,\"title\":\"Mapping\",\"type\":\"string\",\"viewable\":true},\"members\":{\"description\":\"Assignment Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Assignment Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"assignments\",\"reverseRelationship\":true,\"title\":\"Assignment Members Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Assignment Members\",\"type\":\"array\",\"viewable\":true},\"name\":{\"description\":\"The assignment name, used for display purposes.\",\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"viewable\":true},\"roles\":{\"description\":\"Managed Roles\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Managed Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Role\",\"notify\":true,\"path\":\"managed/alpha_role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"assignments\",\"reverseRelationship\":true,\"title\":\"Managed Roles Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Managed Roles\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"type\":{\"description\":\"The type of object this assignment represents\",\"title\":\"Type\",\"type\":\"string\",\"viewable\":true},\"weight\":{\"description\":\"The weight of the assignment.\",\"notifyRelationships\":[\"roles\",\"members\"],\"searchable\":false,\"title\":\"Weight\",\"type\":[\"number\",\"null\"],\"viewable\":true}},\"required\":[\"name\",\"description\",\"mapping\"],\"title\":\"Alpha realm - Assignment\",\"type\":\"object\"}},{\"attributeEncryption\":{},\"name\":\"bravo_assignment\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"A role assignment\",\"icon\":\"fa-key\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Assignment\",\"mat-icon\":\"vpn_key\",\"order\":[\"_id\",\"name\",\"description\",\"type\",\"mapping\",\"attributes\",\"linkQualifiers\",\"roles\",\"members\",\"condition\",\"weight\"],\"properties\":{\"_id\":{\"description\":\"The assignment ID\",\"searchable\":false,\"title\":\"Name\",\"type\":\"string\",\"viewable\":false},\"attributes\":{\"description\":\"The attributes operated on by this assignment.\",\"items\":{\"order\":[\"assignmentOperation\",\"unassignmentOperation\",\"name\",\"value\"],\"properties\":{\"assignmentOperation\":{\"description\":\"Assignment operation\",\"type\":\"string\"},\"name\":{\"description\":\"Name\",\"type\":\"string\"},\"unassignmentOperation\":{\"description\":\"Unassignment operation\",\"type\":\"string\"},\"value\":{\"description\":\"Value\",\"type\":\"string\"}},\"required\":[],\"title\":\"Assignment Attributes Items\",\"type\":\"object\"},\"notifyRelationships\":[\"roles\",\"members\"],\"title\":\"Assignment Attributes\",\"type\":\"array\",\"viewable\":true},\"condition\":{\"description\":\"A conditional filter for this assignment\",\"isConditional\":true,\"searchable\":false,\"title\":\"Condition\",\"type\":\"string\",\"viewable\":false},\"description\":{\"description\":\"The assignment description, used for display purposes.\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"viewable\":true},\"linkQualifiers\":{\"description\":\"Conditional link qualifiers to restrict this assignment to.\",\"items\":{\"title\":\"Link Qualifiers Items\",\"type\":\"string\"},\"title\":\"Link Qualifiers\",\"type\":\"array\",\"viewable\":true},\"mapping\":{\"description\":\"The name of the mapping this assignment applies to\",\"policies\":[{\"policyId\":\"mapping-exists\"}],\"searchable\":true,\"title\":\"Mapping\",\"type\":\"string\",\"viewable\":true},\"members\":{\"description\":\"Assignment Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Assignment Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"assignments\",\"reverseRelationship\":true,\"title\":\"Assignment Members Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Assignment Members\",\"type\":\"array\",\"viewable\":true},\"name\":{\"description\":\"The assignment name, used for display purposes.\",\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"viewable\":true},\"roles\":{\"description\":\"Managed Roles\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Assignment:roles:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Managed Roles Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Role\",\"notify\":true,\"path\":\"managed/bravo_role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"assignments\",\"reverseRelationship\":true,\"title\":\"Managed Roles Items\",\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"title\":\"Managed Roles\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"type\":{\"description\":\"The type of object this assignment represents\",\"title\":\"Type\",\"type\":\"string\",\"viewable\":true},\"weight\":{\"description\":\"The weight of the assignment.\",\"notifyRelationships\":[\"roles\",\"members\"],\"searchable\":false,\"title\":\"Weight\",\"type\":[\"number\",\"null\"],\"viewable\":true}},\"required\":[\"name\",\"description\",\"mapping\"],\"title\":\"Bravo realm - Assignment\",\"type\":\"object\"}},{\"name\":\"alpha_organization\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"An organization or tenant, whose resources are managed by organizational admins.\",\"icon\":\"fa-building\",\"mat-icon\":\"domain\",\"order\":[\"name\",\"description\",\"owners\",\"admins\",\"members\",\"parent\",\"children\",\"adminIDs\",\"ownerIDs\",\"parentAdminIDs\",\"parentOwnerIDs\",\"parentIDs\"],\"properties\":{\"adminIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"admin ids\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\"],\"referencedRelationshipFields\":[\"admins\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"Admin user ids\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"admins\":{\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":false,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"adminOfOrg\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"children\"],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Administrators\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"children\":{\"description\":\"Child Organizations\",\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":true,\"path\":\"managed/alpha_organization\",\"query\":{\"fields\":[\"name\",\"description\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"parent\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Child Organizations\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"description\":{\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"members\":{\"items\":{\"notifySelf\":false,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":true,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"memberOfOrg\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Members\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"name\":{\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"ownerIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"owner ids\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\"],\"referencedRelationshipFields\":[\"owners\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"Owner user ids\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"owners\":{\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":false,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"ownerOfOrg\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"children\"],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Owner\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"parent\":{\"description\":\"Parent Organization\",\"notifyRelationships\":[\"children\",\"members\"],\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":false,\"path\":\"managed/alpha_organization\",\"query\":{\"fields\":[\"name\",\"description\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"returnByDefault\":false,\"reversePropertyName\":\"children\",\"reverseRelationship\":true,\"searchable\":false,\"title\":\"Parent Organization\",\"type\":\"relationship\",\"userEditable\":false,\"validate\":true,\"viewable\":true},\"parentAdminIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"user ids of parent admins\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"adminIDs\",\"parentAdminIDs\"],\"referencedRelationshipFields\":[\"parent\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"user ids of parent admins\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"parentIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"parent org ids\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\",\"parentIDs\"],\"referencedRelationshipFields\":[\"parent\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"parent org ids\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"parentOwnerIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"user ids of parent owners\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"ownerIDs\",\"parentOwnerIDs\"],\"referencedRelationshipFields\":[\"parent\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"user ids of parent owners\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false}},\"required\":[\"name\"],\"title\":\"Alpha realm - Organization\",\"type\":\"object\"}},{\"name\":\"bravo_organization\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"An organization or tenant, whose resources are managed by organizational admins.\",\"icon\":\"fa-building\",\"mat-icon\":\"domain\",\"order\":[\"name\",\"description\",\"owners\",\"admins\",\"members\",\"parent\",\"children\",\"adminIDs\",\"ownerIDs\",\"parentAdminIDs\",\"parentOwnerIDs\",\"parentIDs\"],\"properties\":{\"adminIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"admin ids\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\"],\"referencedRelationshipFields\":[\"admins\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"Admin user ids\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"admins\":{\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":false,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"adminOfOrg\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"children\"],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Administrators\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"children\":{\"description\":\"Child Organizations\",\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":true,\"path\":\"managed/bravo_organization\",\"query\":{\"fields\":[\"name\",\"description\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"parent\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Child Organizations\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"description\":{\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"members\":{\"items\":{\"notifySelf\":false,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":true,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"memberOfOrg\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Members\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"name\":{\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"ownerIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"owner ids\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\"],\"referencedRelationshipFields\":[\"owners\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"Owner user ids\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"owners\":{\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":false,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"ownerOfOrg\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"notifyRelationships\":[\"children\"],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Owner\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"parent\":{\"description\":\"Parent Organization\",\"notifyRelationships\":[\"children\",\"members\"],\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Organization\",\"notify\":false,\"path\":\"managed/bravo_organization\",\"query\":{\"fields\":[\"name\",\"description\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"returnByDefault\":false,\"reversePropertyName\":\"children\",\"reverseRelationship\":true,\"searchable\":false,\"title\":\"Parent Organization\",\"type\":\"relationship\",\"userEditable\":false,\"validate\":true,\"viewable\":true},\"parentAdminIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"user ids of parent admins\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"adminIDs\",\"parentAdminIDs\"],\"referencedRelationshipFields\":[\"parent\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"user ids of parent admins\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"parentIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"parent org ids\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"_id\",\"parentIDs\"],\"referencedRelationshipFields\":[\"parent\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"parent org ids\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false},\"parentOwnerIDs\":{\"isVirtual\":true,\"items\":{\"title\":\"user ids of parent owners\",\"type\":\"string\"},\"queryConfig\":{\"flattenProperties\":true,\"referencedObjectFields\":[\"ownerIDs\",\"parentOwnerIDs\"],\"referencedRelationshipFields\":[\"parent\"]},\"returnByDefault\":true,\"searchable\":false,\"title\":\"user ids of parent owners\",\"type\":\"array\",\"userEditable\":false,\"viewable\":false}},\"required\":[\"name\"],\"title\":\"Bravo realm - Organization\",\"type\":\"object\"}},{\"name\":\"alpha_group\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"icon\":\"fa-group\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Group\",\"mat-icon\":\"group\",\"order\":[\"_id\",\"name\",\"description\",\"condition\",\"members\"],\"properties\":{\"_id\":{\"description\":\"Group ID\",\"isPersonal\":false,\"policies\":[{\"params\":{\"propertyName\":\"name\"},\"policyId\":\"id-must-equal-property\"}],\"searchable\":false,\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":false},\"condition\":{\"description\":\"A filter for conditionally assigned members\",\"isConditional\":true,\"policies\":[{\"policyId\":\"valid-query-filter\"}],\"searchable\":false,\"title\":\"Condition\",\"type\":\"string\",\"viewable\":false},\"description\":{\"description\":\"Group Description\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"userEditable\":false,\"viewable\":true},\"members\":{\"description\":\"Group Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Group:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Group Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"groups\",\"reverseRelationship\":true,\"title\":\"Group Members Items\",\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Members\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"name\":{\"description\":\"Group Name\",\"policies\":[{\"policyId\":\"required\"},{\"params\":{\"forbiddenChars\":[\"/*\"]},\"policyId\":\"cannot-contain-characters\"}],\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"viewable\":true}},\"required\":[\"name\"],\"title\":\"Alpha realm - Group\",\"viewable\":true}},{\"name\":\"bravo_group\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"icon\":\"fa-group\",\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Group\",\"mat-icon\":\"group\",\"order\":[\"_id\",\"name\",\"description\",\"condition\",\"members\"],\"properties\":{\"_id\":{\"description\":\"Group ID\",\"isPersonal\":false,\"policies\":[{\"params\":{\"propertyName\":\"name\"},\"policyId\":\"id-must-equal-property\"}],\"searchable\":false,\"type\":\"string\",\"usageDescription\":\"\",\"userEditable\":false,\"viewable\":false},\"condition\":{\"description\":\"A filter for conditionally assigned members\",\"isConditional\":true,\"policies\":[{\"policyId\":\"valid-query-filter\"}],\"searchable\":false,\"title\":\"Condition\",\"type\":\"string\",\"viewable\":false},\"description\":{\"description\":\"Group Description\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"userEditable\":false,\"viewable\":true},\"members\":{\"description\":\"Group Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Group:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Group Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"conditionalAssociation\":true,\"label\":\"User\",\"notify\":true,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"groups\",\"reverseRelationship\":true,\"title\":\"Group Members Items\",\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Members\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"name\":{\"description\":\"Group Name\",\"policies\":[{\"policyId\":\"required\"},{\"params\":{\"forbiddenChars\":[\"/*\"]},\"policyId\":\"cannot-contain-characters\"}],\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"viewable\":true}},\"required\":[\"name\"],\"title\":\"Bravo realm - Group\",\"viewable\":true}},{\"name\":\"alpha_application\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"Application Object\",\"icon\":\"fa-folder\",\"order\":[\"name\",\"description\",\"url\",\"icon\",\"mappingNames\",\"owners\",\"roles\",\"members\"],\"properties\":{\"_id\":{\"description\":\"Application ID\",\"isPersonal\":false,\"searchable\":false,\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"authoritative\":{\"description\":\"Is this an authoritative application\",\"searchable\":false,\"title\":\"Authoritative\",\"type\":\"boolean\",\"viewable\":false},\"connectorId\":{\"description\":\"Id of the connector associated with the application\",\"searchable\":false,\"title\":\"Connector ID\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"description\":{\"description\":\"Application Description\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"viewable\":true},\"icon\":{\"searchable\":true,\"title\":\"Icon\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"mappingNames\":{\"description\":\"Names of the sync mappings used by an application with provisioning configured.\",\"items\":{\"title\":\"Mapping Name Items\",\"type\":\"string\"},\"searchable\":true,\"title\":\"Sync Mapping Names\",\"type\":\"array\",\"viewable\":true},\"members\":{\"description\":\"Application Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Application:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Group Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":true,\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"applications\",\"reverseRelationship\":true,\"title\":\"Group Members Items\",\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Members\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"name\":{\"description\":\"Application name\",\"notifyRelationships\":[\"roles\",\"members\"],\"policies\":[{\"policyId\":\"unique\"}],\"returnByDefault\":true,\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"owners\":{\"description\":\"Application Owners\",\"items\":{\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Application _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"path\":\"managed/alpha_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"ownerOfApp\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Owners\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"roles\":{\"description\":\"Roles granting users the application\",\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Role\",\"notify\":true,\"path\":\"managed/alpha_role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"applications\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Roles\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"ssoEntities\":{\"description\":\"SSO Entity Id\",\"properties\":{\"idpLocation\":{\"type\":\"string\"},\"idpPrivateId\":{\"type\":\"string\"},\"spLocation\":{\"type\":\"string\"},\"spPrivate\":{\"type\":\"string\"}},\"searchable\":false,\"title\":\"SSO Entity Id\",\"type\":\"object\",\"userEditable\":false,\"viewable\":false},\"templateName\":{\"description\":\"Name of the template the application was created from\",\"searchable\":false,\"title\":\"Template Name\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"templateVersion\":{\"description\":\"The template version\",\"searchable\":false,\"title\":\"Template Version\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"uiConfig\":{\"description\":\"UI Config\",\"isPersonal\":false,\"properties\":{},\"searchable\":false,\"title\":\"UI Config\",\"type\":\"object\",\"usageDescription\":\"\",\"viewable\":false},\"url\":{\"searchable\":true,\"title\":\"Url\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true}},\"required\":[\"name\"],\"title\":\"Alpha realm - Application\",\"type\":\"object\"}},{\"name\":\"bravo_application\",\"schema\":{\"$schema\":\"http://forgerock.org/json-schema#\",\"description\":\"Application Object\",\"icon\":\"fa-folder\",\"order\":[\"name\",\"description\",\"url\",\"icon\",\"mappingNames\",\"owners\",\"roles\",\"members\"],\"properties\":{\"_id\":{\"description\":\"Application ID\",\"isPersonal\":false,\"searchable\":false,\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"authoritative\":{\"description\":\"Is this an authoritative application\",\"searchable\":false,\"title\":\"Authoritative\",\"type\":\"boolean\",\"viewable\":false},\"connectorId\":{\"description\":\"Id of the connector associated with the application\",\"searchable\":false,\"title\":\"Connector ID\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"description\":{\"description\":\"Application Description\",\"searchable\":true,\"title\":\"Description\",\"type\":\"string\",\"viewable\":true},\"icon\":{\"searchable\":true,\"title\":\"Icon\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"mappingNames\":{\"description\":\"Names of the sync mappings used by an application with provisioning configured.\",\"items\":{\"title\":\"Mapping Name Items\",\"type\":\"string\"},\"searchable\":true,\"title\":\"Sync Mapping Names\",\"type\":\"array\",\"viewable\":true},\"members\":{\"description\":\"Application Members\",\"items\":{\"id\":\"urn:jsonschema:org:forgerock:openidm:managed:api:Application:members:items\",\"properties\":{\"_ref\":{\"description\":\"References a relationship from a managed object\",\"type\":\"string\"},\"_refProperties\":{\"description\":\"Supports metadata within the relationship\",\"properties\":{\"_grantType\":{\"description\":\"Grant Type\",\"label\":\"Grant Type\",\"type\":\"string\"},\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Group Members Items _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"notify\":true,\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"applications\",\"reverseRelationship\":true,\"title\":\"Group Members Items\",\"type\":\"relationship\",\"validate\":true},\"policies\":[],\"returnByDefault\":false,\"searchable\":false,\"title\":\"Members\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"name\":{\"description\":\"Application name\",\"notifyRelationships\":[\"roles\",\"members\"],\"policies\":[{\"policyId\":\"unique\"}],\"returnByDefault\":true,\"searchable\":true,\"title\":\"Name\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true},\"owners\":{\"description\":\"Application Owners\",\"items\":{\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"description\":\"_refProperties object ID\",\"type\":\"string\"}},\"title\":\"Application _refProperties\",\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"User\",\"path\":\"managed/bravo_user\",\"query\":{\"fields\":[\"userName\",\"givenName\",\"sn\"],\"queryFilter\":\"true\"}}],\"reversePropertyName\":\"ownerOfApp\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Owners\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"roles\":{\"description\":\"Roles granting users the application\",\"items\":{\"notifySelf\":true,\"properties\":{\"_ref\":{\"type\":\"string\"},\"_refProperties\":{\"properties\":{\"_id\":{\"propName\":\"_id\",\"required\":false,\"type\":\"string\"}},\"type\":\"object\"}},\"resourceCollection\":[{\"label\":\"Role\",\"notify\":true,\"path\":\"managed/bravo_role\",\"query\":{\"fields\":[\"name\"],\"queryFilter\":\"true\",\"sortKeys\":[]}}],\"reversePropertyName\":\"applications\",\"reverseRelationship\":true,\"type\":\"relationship\",\"validate\":true},\"returnByDefault\":false,\"searchable\":false,\"title\":\"Roles\",\"type\":\"array\",\"userEditable\":false,\"viewable\":true},\"ssoEntities\":{\"description\":\"SSO Entity Id\",\"properties\":{\"idpLocation\":{\"type\":\"string\"},\"idpPrivateId\":{\"type\":\"string\"},\"spLocation\":{\"type\":\"string\"},\"spPrivate\":{\"type\":\"string\"}},\"searchable\":false,\"title\":\"SSO Entity Id\",\"type\":\"object\",\"userEditable\":false,\"viewable\":false},\"templateName\":{\"description\":\"Name of the template the application was created from\",\"searchable\":false,\"title\":\"Template Name\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"templateVersion\":{\"description\":\"The template version\",\"searchable\":false,\"title\":\"Template Version\",\"type\":\"string\",\"userEditable\":false,\"viewable\":false},\"uiConfig\":{\"description\":\"UI Config\",\"isPersonal\":false,\"properties\":{},\"searchable\":false,\"title\":\"UI Config\",\"type\":\"object\",\"usageDescription\":\"\",\"viewable\":false},\"url\":{\"searchable\":true,\"title\":\"Url\",\"type\":\"string\",\"userEditable\":true,\"viewable\":true}},\"required\":[\"name\"],\"title\":\"Bravo realm - Application\",\"type\":\"object\"}}]}" - }, - "cookies": [], - "headers": [ - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 671, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.786Z", - "time": 482, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 482 - } - }, - { - "_id": "c9789e331b3217eac130a3fffddf8d18", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1966, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/mapping/managedAlpha_assignment_managedBravo_assignment" - }, - "response": { - "bodySize": 901, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 901, - "text": "{\"_id\":\"mapping/managedAlpha_assignment_managedBravo_assignment\",\"consentRequired\":false,\"displayName\":\"managedAlpha_assignment_managedBravo_assignment\",\"icon\":null,\"name\":\"managedAlpha_assignment_managedBravo_assignment\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/alpha_assignment\",\"target\":\"managed/bravo_assignment\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "901" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.790Z", - "time": 370, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 370 - } - }, - { - "_id": "d49adecdbdc475e85c8a277b20be6593", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1952, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/mapping/managedAlpha_user_systemAzureUser" - }, - "response": { - "bodySize": 2502, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 2502, - "text": "{\"_id\":\"mapping/managedAlpha_user_systemAzureUser\",\"consentRequired\":false,\"defaultSourceFields\":[\"*\",\"assignments\"],\"defaultTargetFields\":[\"*\",\"memberOf\",\"__roles__\",\"__servicePlanIds__\"],\"displayName\":\"managedAlpha_user_systemAzureUser\",\"icon\":null,\"name\":\"managedAlpha_user_systemAzureUser\",\"optimizeAssignmentSync\":true,\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"DELETE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_TARGET_CONFLICT\"},{\"action\":\"INCORPORATE_CHANGES\",\"situation\":\"TARGET_CHANGED\"}],\"properties\":[{\"source\":\"mail\",\"target\":\"mail\"},{\"source\":\"givenName\",\"target\":\"givenName\"},{\"source\":\"sn\",\"target\":\"surname\"},{\"source\":\"\",\"target\":\"displayName\",\"transform\":{\"source\":\"source.givenName+\\\" \\\"+source.sn\",\"type\":\"text/javascript\"}},{\"source\":\"\",\"target\":\"mailNickname\",\"transform\":{\"source\":\"source.givenName[0].toLowerCase()+source.sn.toLowerCase()\",\"type\":\"text/javascript\"}},{\"source\":\"\",\"target\":\"accountEnabled\",\"transform\":{\"source\":\"true\",\"type\":\"text/javascript\"}},{\"condition\":{\"globals\":{},\"source\":\"(typeof oldTarget === 'undefined' || oldTarget === null)\",\"type\":\"text/javascript\"},\"source\":\"\",\"target\":\"__PASSWORD__\",\"transform\":{\"source\":\"\\\"!@#$%\\\"[Math.floor(Math.random()*5)] + Math.random().toString(36).slice(2, 13).toUpperCase()+Math.random().toString(36).slice(2,13)\",\"type\":\"text/javascript\"}}],\"queuedSync\":{\"enabled\":true,\"maxRetries\":0,\"pollingInterval\":10000},\"runTargetPhase\":false,\"source\":\"managed/alpha_user\",\"sourceCondition\":\"/source/effectiveApplications[_id eq \\\"0f357b7e-6c54-4351-a094-43916877d7e5\\\"] or /source/effectiveAssignments[(mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and type eq \\\"__ENTITLEMENT__\\\")]\",\"sourceQuery\":{\"_queryFilter\":\"effectiveApplications[_id eq \\\"0f357b7e-6c54-4351-a094-43916877d7e5\\\"] or lastSync/managedAlpha_user_systemAzureUser pr or /source/effectiveAssignments[(mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and type eq \\\"__ENTITLEMENT__\\\")]\"},\"target\":\"system/Azure/User\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "2502" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.793Z", - "time": 353, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 353 - } - }, - { - "_id": "bb44d96ff4a8330a4c4cf94d72024093", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1956, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/mapping/managedBravo_group_managedBravo_group" - }, - "response": { - "bodySize": 861, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 861, - "text": "{\"_id\":\"mapping/managedBravo_group_managedBravo_group\",\"consentRequired\":false,\"displayName\":\"managedBravo_group_managedBravo_group\",\"icon\":null,\"name\":\"managedBravo_group_managedBravo_group\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/bravo_group\",\"target\":\"managed/bravo_group\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "861" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.796Z", - "time": 409, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 409 - } - }, - { - "_id": "a849434ff0733a39c83ecf4fa46ef9e1", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1955, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/mapping/managedBravo_user_managedBravo_user0" - }, - "response": { - "bodySize": 856, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 856, - "text": "{\"_id\":\"mapping/managedBravo_user_managedBravo_user0\",\"consentRequired\":false,\"displayName\":\"managedBravo_user_managedBravo_user0\",\"icon\":null,\"name\":\"managedBravo_user_managedBravo_user0\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/bravo_user\",\"target\":\"managed/bravo_user\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "856" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.798Z", - "time": 310, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 310 - } - }, - { - "_id": "c706d0ea6627692cdd93f95476086c78", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1928, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/mapping/mapping12" - }, - "response": { - "bodySize": 221, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 221, - "text": "{\"_id\":\"mapping/mapping12\",\"consentRequired\":false,\"displayName\":\"mapping12\",\"linkQualifiers\":[],\"name\":\"mapping12\",\"policies\":[],\"properties\":[],\"source\":\"managed/bravo_user\",\"syncAfter\":[],\"target\":\"managed/bravo_user\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "221" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.801Z", - "time": 369, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 369 - } - }, - { - "_id": "918bf2b09e1786c10e76fbec1bae361d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1963, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/mapping/systemAzure__group___managedAlpha_assignment" - }, - "response": { - "bodySize": 1890, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1890, - "text": "{\"_id\":\"mapping/systemAzure__group___managedAlpha_assignment\",\"consentRequired\":false,\"displayName\":\"systemAzure__group___managedAlpha_assignment\",\"icon\":null,\"name\":\"systemAzure__group___managedAlpha_assignment\",\"policies\":[{\"action\":\"EXCEPTION\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"DELETE\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"CREATE\",\"situation\":\"MISSING\"},{\"action\":\"EXCEPTION\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"DELETE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"EXCEPTION\",\"situation\":\"UNASSIGNED\"},{\"action\":\"EXCEPTION\",\"situation\":\"LINK_ONLY\"},{\"action\":\"IGNORE\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"LINK\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"}],\"properties\":[{\"default\":\"__RESOURCE__\",\"target\":\"type\"},{\"source\":\"\",\"target\":\"description\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.description !== \\\"undefined\\\" && source.description !== null) ? source.description : source._id\",\"type\":\"text/javascript\"}},{\"default\":\"managedAlpha_user_systemAzureUser\",\"target\":\"mapping\"},{\"source\":\"\",\"target\":\"name\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.displayName !== \\\"undefined\\\" && source.displayName !== null) ? source.displayName : source._id\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"attributes\",\"transform\":{\"globals\":{},\"source\":\"[\\n {\\n 'name': 'memberOf',\\n 'value': [source]\\n }\\n]\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"_id\",\"transform\":{\"globals\":{\"sourceObjectSet\":\"system_Azure___GROUP___\"},\"source\":\"sourceObjectSet.concat(source)\",\"type\":\"text/javascript\"}}],\"source\":\"system/Azure/__GROUP__\",\"target\":\"managed/alpha_assignment\",\"targetQuery\":{\"_queryFilter\":\"mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and attributes[name eq \\\"memberOf\\\"]\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1890" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.804Z", - "time": 274, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 274 - } - }, - { - "_id": "7bbe33419e33a6fe499ae3688690db56", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1967, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/mapping/systemAzureDirectoryrole_managedAlpha_assignment" - }, - "response": { - "bodySize": 1912, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1912, - "text": "{\"_id\":\"mapping/systemAzureDirectoryrole_managedAlpha_assignment\",\"consentRequired\":false,\"displayName\":\"systemAzureDirectoryrole_managedAlpha_assignment\",\"icon\":null,\"name\":\"systemAzureDirectoryrole_managedAlpha_assignment\",\"policies\":[{\"action\":\"EXCEPTION\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"DELETE\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"CREATE\",\"situation\":\"MISSING\"},{\"action\":\"EXCEPTION\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"DELETE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"EXCEPTION\",\"situation\":\"UNASSIGNED\"},{\"action\":\"EXCEPTION\",\"situation\":\"LINK_ONLY\"},{\"action\":\"IGNORE\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"LINK\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"}],\"properties\":[{\"default\":\"__RESOURCE__\",\"target\":\"type\"},{\"source\":\"\",\"target\":\"description\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.description !== \\\"undefined\\\" && source.description !== null) ? source.description : source._id\",\"type\":\"text/javascript\"}},{\"default\":\"managedAlpha_user_systemAzureUser\",\"target\":\"mapping\"},{\"source\":\"\",\"target\":\"name\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.displayName !== \\\"undefined\\\" && source.displayName !== null) ? source.displayName : source._id\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"attributes\",\"transform\":{\"globals\":{},\"source\":\"[\\n {\\n 'name': '__roles__',\\n 'value': [source]\\n }\\n]\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"_id\",\"transform\":{\"globals\":{\"sourceObjectSet\":\"system_Azure_directoryRole_\"},\"source\":\"sourceObjectSet.concat(source)\",\"type\":\"text/javascript\"}}],\"source\":\"system/Azure/directoryRole\",\"target\":\"managed/alpha_assignment\",\"targetQuery\":{\"_queryFilter\":\"mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and attributes[name eq \\\"__roles__\\\"]\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1912" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.807Z", - "time": 310, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 310 - } - }, - { - "_id": "09d43e031673d601ce1da2ba48a96117", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1965, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/mapping/systemAzureServiceplan_managedAlpha_assignment" - }, - "response": { - "bodySize": 1944, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1944, - "text": "{\"_id\":\"mapping/systemAzureServiceplan_managedAlpha_assignment\",\"consentRequired\":false,\"displayName\":\"systemAzureServiceplan_managedAlpha_assignment\",\"icon\":null,\"name\":\"systemAzureServiceplan_managedAlpha_assignment\",\"policies\":[{\"action\":\"EXCEPTION\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"DELETE\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"CREATE\",\"situation\":\"MISSING\"},{\"action\":\"EXCEPTION\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"DELETE\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"EXCEPTION\",\"situation\":\"UNASSIGNED\"},{\"action\":\"EXCEPTION\",\"situation\":\"LINK_ONLY\"},{\"action\":\"IGNORE\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"IGNORE\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"LINK\",\"situation\":\"FOUND\"},{\"action\":\"CREATE\",\"situation\":\"ABSENT\"}],\"properties\":[{\"default\":\"__RESOURCE__\",\"target\":\"type\"},{\"source\":\"\",\"target\":\"description\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.servicePlanName !== \\\"undefined\\\" && source.servicePlanName !== null) ? source.servicePlanName : source._id\",\"type\":\"text/javascript\"}},{\"default\":\"managedAlpha_user_systemAzureUser\",\"target\":\"mapping\"},{\"source\":\"\",\"target\":\"name\",\"transform\":{\"globals\":{},\"source\":\"(typeof source.servicePlanName !== \\\"undefined\\\" && source.servicePlanName !== null) ? source.servicePlanName : source._id\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"attributes\",\"transform\":{\"globals\":{},\"source\":\"[\\n {\\n 'name': '__servicePlanIds__',\\n 'value': [source]\\n }\\n]\",\"type\":\"text/javascript\"}},{\"source\":\"_id\",\"target\":\"_id\",\"transform\":{\"globals\":{\"sourceObjectSet\":\"system_Azure_servicePlan_\"},\"source\":\"sourceObjectSet.concat(source)\",\"type\":\"text/javascript\"}}],\"source\":\"system/Azure/servicePlan\",\"target\":\"managed/alpha_assignment\",\"targetQuery\":{\"_queryFilter\":\"mapping eq \\\"managedAlpha_user_systemAzureUser\\\" and attributes[name eq \\\"__servicePlanIds__\\\"]\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1944" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.810Z", - "time": 250, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 250 - } - }, - { - "_id": "e7f746aa4820876c3db5dcefa36dd207", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1952, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/mapping/systemAzureUser_managedAlpha_user" - }, - "response": { - "bodySize": 1583, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1583, - "text": "{\"_id\":\"mapping/systemAzureUser_managedAlpha_user\",\"consentRequired\":false,\"correlationQuery\":[{\"linkQualifier\":\"default\",\"source\":\"var qry = {'_queryFilter': 'mail eq \\\"' + source.mail + '\\\"'}; qry\",\"type\":\"text/javascript\"}],\"defaultSourceFields\":[\"*\",\"memberOf\",\"__roles__\",\"__servicePlanIds__\"],\"defaultTargetFields\":[\"*\",\"assignments\"],\"displayName\":\"systemAzureUser_managedAlpha_user\",\"icon\":null,\"links\":\"managedAlpha_user_systemAzureUser\",\"name\":\"systemAzureUser_managedAlpha_user\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"UPDATE\",\"situation\":\"CONFIRMED\"},{\"action\":\"ONBOARD\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_TARGET_CONFLICT\"}],\"properties\":[{\"referencedObjectType\":\"__GROUP__\",\"source\":\"memberOf\",\"target\":\"assignments\"},{\"referencedObjectType\":\"directoryRole\",\"source\":\"__roles__\",\"target\":\"assignments\"},{\"referencedObjectType\":\"servicePlan\",\"source\":\"__servicePlanIds__\",\"target\":\"assignments\"}],\"reconSourceQueryPageSize\":999,\"reconSourceQueryPaging\":true,\"runTargetPhase\":false,\"source\":\"system/Azure/User\",\"sourceQueryFullEntry\":true,\"target\":\"managed/alpha_user\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1583" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.814Z", - "time": 228, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 228 - } - }, - { - "_id": "00725d753c390a655105f030d582ccaa", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1917, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/policy" - }, - "response": { - "bodySize": 52, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 52, - "text": "{\"_id\":\"policy\",\"additionalFiles\":[],\"resources\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "52" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 663, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.816Z", - "time": 245, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 245 - } - }, - { - "_id": "3b7ebd7cf01869d6ce8cf4a5c9da9642", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1931, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/privilegeAssignments" - }, - "response": { - "bodySize": 493, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 493, - "text": "{\"_id\":\"privilegeAssignments\",\"privilegeAssignments\":[{\"name\":\"ownerPrivileges\",\"privileges\":[\"owner-view-update-delete-orgs\",\"owner-create-orgs\",\"owner-view-update-delete-admins-and-members\",\"owner-create-admins\",\"admin-view-update-delete-members\",\"admin-create-members\"],\"relationshipField\":\"ownerOfOrg\"},{\"name\":\"adminPrivileges\",\"privileges\":[\"admin-view-update-delete-orgs\",\"admin-create-orgs\",\"admin-view-update-delete-members\",\"admin-create-members\"],\"relationshipField\":\"adminOfOrg\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "493" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.820Z", - "time": 379, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 379 - } - }, - { - "_id": "47768b99c96433fcc0faa9554a4e372e", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1921, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/privileges" - }, - "response": { - "bodySize": 36, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 36, - "text": "{\"_id\":\"privileges\",\"privileges\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "36" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 663, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.823Z", - "time": 406, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 406 - } - }, - { - "_id": "ffb2a0b586fea6e226c2864da015942e", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1940, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/provisioner.openic/GoogleApps" - }, - "response": { - "bodySize": 7392, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 7392, - "text": "{\"_id\":\"provisioner.openic/GoogleApps\",\"configurationProperties\":{\"availableLicenses\":[\"101005/1010050001\",\"101001/1010010001\",\"101031/1010310010\",\"101034/1010340002\",\"101038/1010380002\",\"101034/1010340001\",\"101038/1010380003\",\"101034/1010340004\",\"101034/1010340003\",\"101034/1010340006\",\"Google-Apps/Google-Apps-For-Business\",\"101034/1010340005\",\"Google-Vault/Google-Vault\",\"Google-Apps/1010020031\",\"Google-Apps/1010020030\",\"Google-Apps/1010060003\",\"Google-Apps/1010060005\",\"Google-Apps/Google-Apps-Unlimited\",\"Google-Apps/1010020029\",\"Google-Apps/Google-Apps-Lite\",\"101031/1010310003\",\"101033/1010330002\",\"101033/1010330004\",\"Google-Apps/Google-Apps-For-Education\",\"101031/1010310002\",\"101033/1010330003\",\"Google-Apps/1010020026\",\"101031/1010310007\",\"Google-Apps/1010020025\",\"101031/1010310008\",\"Google-Apps/1010020028\",\"Google-Apps/Google-Apps-For-Postini\",\"101031/1010310005\",\"Google-Apps/1010020027\",\"101031/1010310006\",\"101031/1010310009\",\"Google-Vault/Google-Vault-Former-Employee\",\"101038/1010370001\",\"Google-Apps/1010020020\",\"Google-Apps/1010060001\"],\"clientId\":\"&{esv.gac.client.id}\",\"clientSecret\":\"&{esv.gac.secret}\",\"domain\":\"&{esv.gac.domain}\",\"groupsMaxResults\":\"200\",\"listProductAndSkuMaxResults\":\"100\",\"listProductMaxResults\":\"100\",\"membersMaxResults\":\"200\",\"proxyHost\":null,\"proxyPort\":8080,\"refreshToken\":\"&{esv.gac.refresh}\",\"roleAssignmentMaxResults\":100,\"roleMaxResults\":100,\"usersMaxResults\":\"100\",\"validateCertificate\":true},\"connectorRef\":{\"bundleName\":\"org.forgerock.openicf.connectors.googleapps-connector\",\"bundleVersion\":\"[1.5.0.0,1.6.0.0)\",\"connectorHostRef\":\"\",\"connectorName\":\"org.forgerock.openicf.connectors.googleapps.GoogleAppsConnector\",\"displayName\":\"GoogleApps Connector\",\"systemType\":\"provisioner.openicf\"},\"enabled\":{\"$bool\":\"&{esv.gac.enable.connector}\"},\"objectTypes\":{\"__ACCOUNT__\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"__ACCOUNT__\",\"nativeType\":\"__ACCOUNT__\",\"properties\":{\"__GROUPS__\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"__GROUPS__\",\"nativeType\":\"string\",\"type\":\"array\"},\"__NAME__\":{\"nativeName\":\"__NAME__\",\"nativeType\":\"string\",\"type\":\"string\"},\"__PASSWORD__\":{\"flags\":[\"NOT_READABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"__PASSWORD__\",\"nativeType\":\"JAVA_TYPE_GUARDEDSTRING\",\"required\":true,\"type\":\"string\"},\"__PHOTO__\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"__PHOTO__\",\"nativeType\":\"JAVA_TYPE_BYTE_ARRAY\",\"type\":\"string\"},\"__SECONDARY_EMAILS__\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"__SECONDARY_EMAILS__\",\"nativeType\":\"object\",\"type\":\"array\"},\"__UID__\":{\"nativeName\":\"__UID__\",\"nativeType\":\"string\",\"required\":false,\"type\":\"string\"},\"addresses\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"addresses\",\"nativeType\":\"object\",\"type\":\"array\"},\"agreedToTerms\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"agreedToTerms\",\"nativeType\":\"JAVA_TYPE_PRIMITIVE_BOOLEAN\",\"type\":\"boolean\"},\"aliases\":{\"flags\":[\"NOT_CREATABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"aliases\",\"nativeType\":\"string\",\"type\":\"array\"},\"archived\":{\"nativeName\":\"archived\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"changePasswordAtNextLogin\":{\"nativeName\":\"changePasswordAtNextLogin\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"creationTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"creationTime\",\"nativeType\":\"string\",\"type\":\"array\"},\"customSchemas\":{\"nativeName\":\"customSchemas\",\"nativeType\":\"object\",\"type\":\"object\"},\"customerId\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"customerId\",\"nativeType\":\"string\",\"type\":\"string\"},\"deletionTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"deletionTime\",\"nativeType\":\"string\",\"type\":\"string\"},\"externalIds\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"externalIds\",\"nativeType\":\"object\",\"type\":\"array\"},\"familyName\":{\"nativeName\":\"familyName\",\"nativeType\":\"string\",\"type\":\"string\"},\"fullName\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"fullName\",\"nativeType\":\"string\",\"type\":\"string\"},\"givenName\":{\"nativeName\":\"givenName\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"hashFunction\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"hashFunction\",\"nativeType\":\"string\",\"type\":\"string\"},\"ims\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"ims\",\"nativeType\":\"object\",\"type\":\"array\"},\"includeInGlobalAddressList\":{\"nativeName\":\"includeInGlobalAddressList\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"ipWhitelisted\":{\"nativeName\":\"ipWhitelisted\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"isAdmin\":{\"nativeName\":\"isAdmin\",\"nativeType\":\"JAVA_TYPE_PRIMITIVE_BOOLEAN\",\"type\":\"boolean\"},\"isDelegatedAdmin\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isDelegatedAdmin\",\"nativeType\":\"JAVA_TYPE_PRIMITIVE_BOOLEAN\",\"type\":\"boolean\"},\"isEnforcedIn2Sv\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isEnforcedIn2Sv\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"isEnrolledIn2Sv\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isEnrolledIn2Sv\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"isMailboxSetup\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isMailboxSetup\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"languages\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"languages\",\"nativeType\":\"object\",\"type\":\"array\"},\"lastLoginTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"lastLoginTime\",\"nativeType\":\"string\",\"type\":\"array\"},\"nonEditableAliases\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"nonEditableAliases\",\"nativeType\":\"string\",\"type\":\"array\"},\"orgUnitPath\":{\"nativeName\":\"orgUnitPath\",\"nativeType\":\"string\",\"type\":\"string\"},\"organizations\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"organizations\",\"nativeType\":\"object\",\"type\":\"array\"},\"phones\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"phones\",\"nativeType\":\"object\",\"type\":\"array\"},\"primaryEmail\":{\"nativeName\":\"primaryEmail\",\"nativeType\":\"string\",\"type\":\"string\"},\"recoveryEmail\":{\"nativeName\":\"recoveryEmail\",\"nativeType\":\"string\",\"type\":\"string\"},\"recoveryPhone\":{\"nativeName\":\"recoveryPhone\",\"nativeType\":\"string\",\"type\":\"string\"},\"relations\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"relations\",\"nativeType\":\"object\",\"type\":\"array\"},\"suspended\":{\"nativeName\":\"suspended\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"suspensionReason\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"suspensionReason\",\"nativeType\":\"string\",\"type\":\"string\"},\"thumbnailPhotoUrl\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"thumbnailPhotoUrl\",\"nativeType\":\"string\",\"type\":\"string\"}},\"type\":\"object\"}},\"operationTimeout\":{\"AUTHENTICATE\":-1,\"CREATE\":-1,\"DELETE\":-1,\"GET\":-1,\"RESOLVEUSERNAME\":-1,\"SCHEMA\":-1,\"SCRIPT_ON_CONNECTOR\":-1,\"SCRIPT_ON_RESOURCE\":-1,\"SEARCH\":-1,\"SYNC\":-1,\"TEST\":-1,\"UPDATE\":-1,\"VALIDATE\":-1},\"poolConfigOption\":{\"maxIdle\":10,\"maxObjects\":10,\"maxWait\":150000,\"minEvictableIdleTimeMillis\":120000,\"minIdle\":1},\"resultsHandlerConfig\":{\"enableAttributesToGetSearchResultsHandler\":true,\"enableCaseInsensitiveFilter\":false,\"enableFilteredResultsHandler\":false,\"enableNormalizingResultsHandler\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "7392" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.830Z", - "time": 235, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 235 - } - }, - { - "_id": "e2dab230001cba4c5e4ec0ce81abf48f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1952, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/provisioner.openicf.connectorinfoprovider" - }, - "response": { - "bodySize": 253, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 253, - "text": "{\"_id\":\"provisioner.openicf.connectorinfoprovider\",\"connectorsLocation\":\"connectors\",\"remoteConnectorClients\":[{\"enabled\":true,\"name\":\"rcs1\",\"useSSL\":true}],\"remoteConnectorClientsGroups\":[],\"remoteConnectorServers\":[],\"remoteConnectorServersGroups\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "253" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.834Z", - "time": 358, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 358 - } - }, - { - "_id": "7dd1293917c7768e7388fbea8ed7d3d2", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1936, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/provisioner.openicf/Azure" - }, - "response": { - "bodySize": 11938, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 11938, - "text": "{\"_id\":\"provisioner.openicf/Azure\",\"configurationProperties\":{\"clientId\":\"4b07adcc-329c-434c-aa83-49a14bef3c49\",\"clientSecret\":{\"$crypto\":{\"type\":\"x-simple-encryption\",\"value\":{\"cipher\":\"AES/CBC/PKCS5Padding\",\"data\":\"W63amdvzlmynT40WOTl1wPWDc8FUlGWQZK158lmlFTrnhy9PbWZV5YE4v3VeMUDC\",\"iv\":\"KG/YFc8v26QHJzRI3uFhzw==\",\"keySize\":16,\"mac\":\"mA4BzCNS7tuLhosQ+es1Tg==\",\"purpose\":\"idm.config.encryption\",\"salt\":\"vvPwKk0KqOqMjElQgICqEA==\",\"stableId\":\"openidm-sym-default\"}}},\"httpProxyHost\":null,\"httpProxyPassword\":null,\"httpProxyPort\":null,\"httpProxyUsername\":null,\"licenseCacheExpiryTime\":60,\"performHardDelete\":true,\"readRateLimit\":null,\"tenant\":\"711ffa9c-5972-4713-ace3-688c9732614a\",\"writeRateLimit\":null},\"connectorRef\":{\"bundleName\":\"org.forgerock.openicf.connectors.msgraphapi-connector\",\"bundleVersion\":\"1.5.20.21\",\"connectorName\":\"org.forgerock.openicf.connectors.msgraphapi.MSGraphAPIConnector\",\"displayName\":\"MSGraphAPI Connector\",\"systemType\":\"provisioner.openicf\"},\"enabled\":true,\"objectTypes\":{\"User\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"__ACCOUNT__\",\"nativeType\":\"__ACCOUNT__\",\"properties\":{\"__PASSWORD__\":{\"autocomplete\":\"new-password\",\"flags\":[\"NOT_UPDATEABLE\",\"NOT_READABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"__PASSWORD__\",\"nativeType\":\"JAVA_TYPE_GUARDEDSTRING\",\"required\":true,\"type\":\"string\"},\"__roles__\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"__roles__\",\"nativeType\":\"string\",\"type\":\"array\"},\"__servicePlanIds__\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"__servicePlanIds__\",\"nativeType\":\"string\",\"type\":\"array\"},\"accountEnabled\":{\"nativeName\":\"accountEnabled\",\"nativeType\":\"boolean\",\"required\":true,\"type\":\"boolean\"},\"city\":{\"nativeName\":\"city\",\"nativeType\":\"string\",\"type\":\"string\"},\"companyName\":{\"nativeName\":\"companyName\",\"nativeType\":\"string\",\"type\":\"string\"},\"country\":{\"nativeName\":\"country\",\"nativeType\":\"string\",\"type\":\"string\"},\"department\":{\"nativeName\":\"department\",\"nativeType\":\"string\",\"type\":\"string\"},\"displayName\":{\"nativeName\":\"displayName\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"givenName\":{\"nativeName\":\"givenName\",\"nativeType\":\"string\",\"type\":\"string\"},\"jobTitle\":{\"nativeName\":\"jobTitle\",\"nativeType\":\"string\",\"type\":\"string\"},\"mail\":{\"nativeName\":\"mail\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"mailNickname\":{\"nativeName\":\"mailNickname\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"manager\":{\"nativeName\":\"manager\",\"nativeType\":\"object\",\"type\":\"object\"},\"memberOf\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"memberOf\",\"nativeType\":\"string\",\"type\":\"array\"},\"mobilePhone\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"mobilePhone\",\"nativeType\":\"string\",\"type\":\"string\"},\"onPremisesImmutableId\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"onPremisesImmutableId\",\"nativeType\":\"string\",\"type\":\"string\"},\"onPremisesSecurityIdentifier\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"onPremisesSecurityIdentifier\",\"nativeType\":\"string\",\"type\":\"string\"},\"otherMails\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"otherMails\",\"nativeType\":\"string\",\"type\":\"array\"},\"postalCode\":{\"nativeName\":\"postalCode\",\"nativeType\":\"string\",\"type\":\"string\"},\"preferredLanguage\":{\"nativeName\":\"preferredLanguage\",\"nativeType\":\"string\",\"type\":\"string\"},\"proxyAddresses\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"proxyAddresses\",\"nativeType\":\"string\",\"type\":\"array\"},\"state\":{\"nativeName\":\"state\",\"nativeType\":\"string\",\"type\":\"string\"},\"streetAddress\":{\"nativeName\":\"streetAddress\",\"nativeType\":\"string\",\"type\":\"string\"},\"surname\":{\"nativeName\":\"surname\",\"nativeType\":\"string\",\"type\":\"string\"},\"usageLocation\":{\"nativeName\":\"usageLocation\",\"nativeType\":\"string\",\"type\":\"string\"},\"userPrincipalName\":{\"nativeName\":\"userPrincipalName\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"userType\":{\"nativeName\":\"userType\",\"nativeType\":\"string\",\"type\":\"string\"}},\"type\":\"object\"},\"__GROUP__\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"__GROUP__\",\"nativeType\":\"__GROUP__\",\"properties\":{\"__NAME__\":{\"nativeName\":\"__NAME__\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"description\":{\"nativeName\":\"description\",\"nativeType\":\"string\",\"type\":\"string\"},\"displayName\":{\"nativeName\":\"displayName\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"groupTypes\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"groupTypes\",\"nativeType\":\"string\",\"type\":\"string\"},\"id\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"id\",\"type\":\"string\"},\"mail\":{\"nativeName\":\"mail\",\"nativeType\":\"string\",\"type\":\"string\"},\"mailEnabled\":{\"nativeName\":\"mailEnabled\",\"nativeType\":\"boolean\",\"required\":true,\"type\":\"boolean\"},\"onPremisesSecurityIdentifier\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"onPremisesSecurityIdentifier\",\"nativeType\":\"string\",\"type\":\"string\"},\"proxyAddresses\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"proxyAddresses\",\"nativeType\":\"string\",\"type\":\"array\"},\"securityEnabled\":{\"nativeName\":\"securityEnabled\",\"nativeType\":\"boolean\",\"required\":true,\"type\":\"boolean\"},\"type\":{\"nativeName\":\"type\",\"required\":true,\"type\":\"string\"}},\"type\":\"object\"},\"directoryRole\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"directoryRole\",\"nativeType\":\"directoryRole\",\"properties\":{\"description\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"description\",\"nativeType\":\"string\",\"type\":\"string\"},\"displayName\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"displayName\",\"nativeType\":\"string\",\"type\":\"string\"}},\"type\":\"object\"},\"servicePlan\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"servicePlan\",\"nativeType\":\"servicePlan\",\"properties\":{\"__NAME__\":{\"nativeName\":\"__NAME__\",\"nativeType\":\"string\",\"type\":\"string\"},\"appliesTo\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"appliesTo\",\"nativeType\":\"string\",\"type\":\"string\"},\"provisioningStatus\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"provisioningStatus\",\"nativeType\":\"string\",\"type\":\"string\"},\"servicePlanId\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"servicePlanId\",\"nativeType\":\"string\",\"type\":\"string\"},\"servicePlanName\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"servicePlanName\",\"nativeType\":\"string\",\"type\":\"string\"},\"subscriberSkuId\":{\"flags\":[\"NOT_UPDATEABLE\",\"NOT_CREATABLE\"],\"nativeName\":\"subscriberSkuId\",\"type\":\"string\"}},\"type\":\"object\"},\"servicePrincipal\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"servicePrincipal\",\"nativeType\":\"servicePrincipal\",\"properties\":{\"__NAME__\":{\"nativeName\":\"__NAME__\",\"nativeType\":\"string\",\"type\":\"string\"},\"__addAppRoleAssignedTo__\":{\"flags\":[\"NOT_READABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"__addAppRoleAssignedTo__\",\"nativeType\":\"object\",\"type\":\"array\"},\"__addAppRoleAssignments__\":{\"flags\":[\"NOT_READABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"__addAppRoleAssignments__\",\"nativeType\":\"object\",\"type\":\"array\"},\"__removeAppRoleAssignedTo__\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"__removeAppRoleAssignedTo__\",\"nativeType\":\"string\",\"type\":\"array\"},\"__removeAppRoleAssignments__\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"__removeAppRoleAssignments__\",\"nativeType\":\"string\",\"type\":\"array\"},\"accountEnabled\":{\"nativeName\":\"accountEnabled\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"addIns\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"addIns\",\"nativeType\":\"object\",\"type\":\"array\"},\"alternativeNames\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"alternativeNames\",\"nativeType\":\"string\",\"type\":\"array\"},\"appDescription\":{\"nativeName\":\"appDescription\",\"nativeType\":\"string\",\"type\":\"string\"},\"appDisplayName\":{\"nativeName\":\"appDisplayName\",\"nativeType\":\"string\",\"type\":\"string\"},\"appId\":{\"nativeName\":\"appId\",\"nativeType\":\"string\",\"type\":\"string\"},\"appOwnerOrganizationId\":{\"nativeName\":\"appOwnerOrganizationId\",\"nativeType\":\"string\",\"type\":\"string\"},\"appRoleAssignmentRequired\":{\"nativeName\":\"appRoleAssignmentRequired\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"appRoles\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"appRoles\",\"nativeType\":\"object\",\"type\":\"array\"},\"applicationTemplateId\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"applicationTemplateId\",\"nativeType\":\"string\",\"type\":\"string\"},\"deletedDateTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"deletedDateTime\",\"nativeType\":\"string\",\"type\":\"string\"},\"description\":{\"nativeName\":\"description\",\"nativeType\":\"string\",\"type\":\"string\"},\"disabledByMicrosoftStatus\":{\"nativeName\":\"disabledByMicrosoftStatus\",\"nativeType\":\"string\",\"type\":\"string\"},\"displayName\":{\"nativeName\":\"displayName\",\"nativeType\":\"string\",\"type\":\"string\"},\"homepage\":{\"nativeName\":\"homepage\",\"nativeType\":\"string\",\"type\":\"string\"},\"info\":{\"nativeName\":\"info\",\"nativeType\":\"object\",\"type\":\"object\"},\"keyCredentials\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"keyCredentials\",\"nativeType\":\"object\",\"type\":\"array\"},\"loginUrl\":{\"nativeName\":\"loginUrl\",\"nativeType\":\"string\",\"type\":\"string\"},\"logoutUrl\":{\"nativeName\":\"logoutUrl\",\"nativeType\":\"string\",\"type\":\"string\"},\"notes\":{\"nativeName\":\"notes\",\"nativeType\":\"string\",\"type\":\"string\"},\"notificationEmailAddresses\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"notificationEmailAddresses\",\"nativeType\":\"string\",\"type\":\"array\"},\"oauth2PermissionScopes\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"oauth2PermissionScopes\",\"nativeType\":\"object\",\"type\":\"array\"},\"passwordCredentials\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"passwordCredentials\",\"nativeType\":\"object\",\"type\":\"array\"},\"preferredSingleSignOnMode\":{\"nativeName\":\"preferredSingleSignOnMode\",\"nativeType\":\"string\",\"type\":\"string\"},\"replyUrls\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"replyUrls\",\"nativeType\":\"string\",\"type\":\"array\"},\"resourceSpecificApplicationPermissions\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"resourceSpecificApplicationPermissions\",\"nativeType\":\"object\",\"type\":\"array\"},\"samlSingleSignOnSettings\":{\"nativeName\":\"samlSingleSignOnSettings\",\"nativeType\":\"object\",\"type\":\"object\"},\"servicePrincipalNames\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"servicePrincipalNames\",\"nativeType\":\"string\",\"type\":\"array\"},\"servicePrincipalType\":{\"nativeName\":\"servicePrincipalType\",\"nativeType\":\"string\",\"type\":\"string\"},\"signInAudience\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"signInAudience\",\"nativeType\":\"string\",\"type\":\"string\"},\"tags\":{\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"tags\",\"nativeType\":\"string\",\"type\":\"array\"},\"tokenEncryptionKeyId\":{\"nativeName\":\"tokenEncryptionKeyId\",\"nativeType\":\"string\",\"type\":\"string\"},\"verifiedPublisher\":{\"nativeName\":\"verifiedPublisher\",\"nativeType\":\"object\",\"type\":\"object\"}},\"type\":\"object\"}},\"operationTimeout\":{\"AUTHENTICATE\":-1,\"CREATE\":-1,\"DELETE\":-1,\"GET\":-1,\"RESOLVEUSERNAME\":-1,\"SCHEMA\":-1,\"SCRIPT_ON_CONNECTOR\":-1,\"SCRIPT_ON_RESOURCE\":-1,\"SEARCH\":-1,\"SYNC\":-1,\"TEST\":-1,\"UPDATE\":-1,\"VALIDATE\":-1},\"poolConfigOption\":{\"maxIdle\":10,\"maxObjects\":10,\"maxWait\":150000,\"minEvictableIdleTimeMillis\":120000,\"minIdle\":1},\"resultsHandlerConfig\":{\"enableAttributesToGetSearchResultsHandler\":true,\"enableCaseInsensitiveFilter\":false,\"enableFilteredResultsHandler\":false,\"enableNormalizingResultsHandler\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "11938" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 666, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.837Z", - "time": 380, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 380 - } - }, - { - "_id": "8b356456ac8c407d42f9f7ca6fd296f6", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1941, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/provisioner.openicf/GoogleApps" - }, - "response": { - "bodySize": 7393, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 7393, - "text": "{\"_id\":\"provisioner.openicf/GoogleApps\",\"configurationProperties\":{\"availableLicenses\":[\"101005/1010050001\",\"101001/1010010001\",\"101031/1010310010\",\"101034/1010340002\",\"101038/1010380002\",\"101034/1010340001\",\"101038/1010380003\",\"101034/1010340004\",\"101034/1010340003\",\"101034/1010340006\",\"Google-Apps/Google-Apps-For-Business\",\"101034/1010340005\",\"Google-Vault/Google-Vault\",\"Google-Apps/1010020031\",\"Google-Apps/1010020030\",\"Google-Apps/1010060003\",\"Google-Apps/1010060005\",\"Google-Apps/Google-Apps-Unlimited\",\"Google-Apps/1010020029\",\"Google-Apps/Google-Apps-Lite\",\"101031/1010310003\",\"101033/1010330002\",\"101033/1010330004\",\"Google-Apps/Google-Apps-For-Education\",\"101031/1010310002\",\"101033/1010330003\",\"Google-Apps/1010020026\",\"101031/1010310007\",\"Google-Apps/1010020025\",\"101031/1010310008\",\"Google-Apps/1010020028\",\"Google-Apps/Google-Apps-For-Postini\",\"101031/1010310005\",\"Google-Apps/1010020027\",\"101031/1010310006\",\"101031/1010310009\",\"Google-Vault/Google-Vault-Former-Employee\",\"101038/1010370001\",\"Google-Apps/1010020020\",\"Google-Apps/1010060001\"],\"clientId\":\"&{esv.gac.client.id}\",\"clientSecret\":\"&{esv.gac.secret}\",\"domain\":\"&{esv.gac.domain}\",\"groupsMaxResults\":\"200\",\"listProductAndSkuMaxResults\":\"100\",\"listProductMaxResults\":\"100\",\"membersMaxResults\":\"200\",\"proxyHost\":null,\"proxyPort\":8080,\"refreshToken\":\"&{esv.gac.refresh}\",\"roleAssignmentMaxResults\":100,\"roleMaxResults\":100,\"usersMaxResults\":\"100\",\"validateCertificate\":true},\"connectorRef\":{\"bundleName\":\"org.forgerock.openicf.connectors.googleapps-connector\",\"bundleVersion\":\"[1.5.0.0,1.6.0.0)\",\"connectorHostRef\":\"\",\"connectorName\":\"org.forgerock.openicf.connectors.googleapps.GoogleAppsConnector\",\"displayName\":\"GoogleApps Connector\",\"systemType\":\"provisioner.openicf\"},\"enabled\":{\"$bool\":\"&{esv.gac.enable.connector}\"},\"objectTypes\":{\"__ACCOUNT__\":{\"$schema\":\"http://json-schema.org/draft-03/schema\",\"id\":\"__ACCOUNT__\",\"nativeType\":\"__ACCOUNT__\",\"properties\":{\"__GROUPS__\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"__GROUPS__\",\"nativeType\":\"string\",\"type\":\"array\"},\"__NAME__\":{\"nativeName\":\"__NAME__\",\"nativeType\":\"string\",\"type\":\"string\"},\"__PASSWORD__\":{\"flags\":[\"NOT_READABLE\",\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"__PASSWORD__\",\"nativeType\":\"JAVA_TYPE_GUARDEDSTRING\",\"required\":true,\"type\":\"string\"},\"__PHOTO__\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"__PHOTO__\",\"nativeType\":\"JAVA_TYPE_BYTE_ARRAY\",\"type\":\"string\"},\"__SECONDARY_EMAILS__\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"__SECONDARY_EMAILS__\",\"nativeType\":\"object\",\"type\":\"array\"},\"__UID__\":{\"nativeName\":\"__UID__\",\"nativeType\":\"string\",\"required\":false,\"type\":\"string\"},\"addresses\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"addresses\",\"nativeType\":\"object\",\"type\":\"array\"},\"agreedToTerms\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"agreedToTerms\",\"nativeType\":\"JAVA_TYPE_PRIMITIVE_BOOLEAN\",\"type\":\"boolean\"},\"aliases\":{\"flags\":[\"NOT_CREATABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"aliases\",\"nativeType\":\"string\",\"type\":\"array\"},\"archived\":{\"nativeName\":\"archived\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"changePasswordAtNextLogin\":{\"nativeName\":\"changePasswordAtNextLogin\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"creationTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"creationTime\",\"nativeType\":\"string\",\"type\":\"array\"},\"customSchemas\":{\"nativeName\":\"customSchemas\",\"nativeType\":\"object\",\"type\":\"object\"},\"customerId\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"customerId\",\"nativeType\":\"string\",\"type\":\"string\"},\"deletionTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"deletionTime\",\"nativeType\":\"string\",\"type\":\"string\"},\"externalIds\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"externalIds\",\"nativeType\":\"object\",\"type\":\"array\"},\"familyName\":{\"nativeName\":\"familyName\",\"nativeType\":\"string\",\"type\":\"string\"},\"fullName\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"fullName\",\"nativeType\":\"string\",\"type\":\"string\"},\"givenName\":{\"nativeName\":\"givenName\",\"nativeType\":\"string\",\"required\":true,\"type\":\"string\"},\"hashFunction\":{\"flags\":[\"NOT_RETURNED_BY_DEFAULT\"],\"nativeName\":\"hashFunction\",\"nativeType\":\"string\",\"type\":\"string\"},\"ims\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"ims\",\"nativeType\":\"object\",\"type\":\"array\"},\"includeInGlobalAddressList\":{\"nativeName\":\"includeInGlobalAddressList\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"ipWhitelisted\":{\"nativeName\":\"ipWhitelisted\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"isAdmin\":{\"nativeName\":\"isAdmin\",\"nativeType\":\"JAVA_TYPE_PRIMITIVE_BOOLEAN\",\"type\":\"boolean\"},\"isDelegatedAdmin\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isDelegatedAdmin\",\"nativeType\":\"JAVA_TYPE_PRIMITIVE_BOOLEAN\",\"type\":\"boolean\"},\"isEnforcedIn2Sv\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isEnforcedIn2Sv\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"isEnrolledIn2Sv\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isEnrolledIn2Sv\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"isMailboxSetup\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"isMailboxSetup\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"languages\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"languages\",\"nativeType\":\"object\",\"type\":\"array\"},\"lastLoginTime\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"lastLoginTime\",\"nativeType\":\"string\",\"type\":\"array\"},\"nonEditableAliases\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"items\":{\"nativeType\":\"string\",\"type\":\"string\"},\"nativeName\":\"nonEditableAliases\",\"nativeType\":\"string\",\"type\":\"array\"},\"orgUnitPath\":{\"nativeName\":\"orgUnitPath\",\"nativeType\":\"string\",\"type\":\"string\"},\"organizations\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"organizations\",\"nativeType\":\"object\",\"type\":\"array\"},\"phones\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"phones\",\"nativeType\":\"object\",\"type\":\"array\"},\"primaryEmail\":{\"nativeName\":\"primaryEmail\",\"nativeType\":\"string\",\"type\":\"string\"},\"recoveryEmail\":{\"nativeName\":\"recoveryEmail\",\"nativeType\":\"string\",\"type\":\"string\"},\"recoveryPhone\":{\"nativeName\":\"recoveryPhone\",\"nativeType\":\"string\",\"type\":\"string\"},\"relations\":{\"items\":{\"nativeType\":\"object\",\"type\":\"object\"},\"nativeName\":\"relations\",\"nativeType\":\"object\",\"type\":\"array\"},\"suspended\":{\"nativeName\":\"suspended\",\"nativeType\":\"boolean\",\"type\":\"boolean\"},\"suspensionReason\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"suspensionReason\",\"nativeType\":\"string\",\"type\":\"string\"},\"thumbnailPhotoUrl\":{\"flags\":[\"NOT_CREATABLE\",\"NOT_UPDATEABLE\"],\"nativeName\":\"thumbnailPhotoUrl\",\"nativeType\":\"string\",\"type\":\"string\"}},\"type\":\"object\"}},\"operationTimeout\":{\"AUTHENTICATE\":-1,\"CREATE\":-1,\"DELETE\":-1,\"GET\":-1,\"RESOLVEUSERNAME\":-1,\"SCHEMA\":-1,\"SCRIPT_ON_CONNECTOR\":-1,\"SCRIPT_ON_RESOURCE\":-1,\"SEARCH\":-1,\"SYNC\":-1,\"TEST\":-1,\"UPDATE\":-1,\"VALIDATE\":-1},\"poolConfigOption\":{\"maxIdle\":10,\"maxObjects\":10,\"maxWait\":150000,\"minEvictableIdleTimeMillis\":120000,\"minIdle\":1},\"resultsHandlerConfig\":{\"enableAttributesToGetSearchResultsHandler\":true,\"enableCaseInsensitiveFilter\":false,\"enableFilteredResultsHandler\":false,\"enableNormalizingResultsHandler\":false}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "7393" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.840Z", - "time": 332, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 332 - } - }, - { - "_id": "bc1b98e58c7b710a4bc8518787bef019", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1918, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/repo.ds" - }, - "response": { - "bodySize": 40821, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 40821, - "text": "{\"_id\":\"repo.ds\",\"commands\":{\"delete-mapping-links\":{\"_queryFilter\":\"/linkType eq \\\"${mapping}\\\"\",\"operation\":\"DELETE\"},\"delete-target-ids-for-recon\":{\"_queryFilter\":\"/reconId eq \\\"${reconId}\\\"\",\"operation\":\"DELETE\"}},\"embedded\":false,\"ldapConnectionFactories\":{\"bind\":{\"availabilityCheckIntervalSeconds\":30,\"availabilityCheckTimeoutMilliSeconds\":10000,\"connectionPoolSize\":50,\"connectionSecurity\":\"none\",\"heartBeatIntervalSeconds\":60,\"heartBeatTimeoutMilliSeconds\":10000,\"primaryLdapServers\":[{\"hostname\":\"userstore-0.userstore\",\"port\":1389}],\"secondaryLdapServers\":[{\"hostname\":\"userstore-2.userstore\",\"port\":1389}]},\"root\":{\"authentication\":{\"simple\":{\"bindDn\":\"uid=admin\",\"bindPassword\":\"&{userstore.password}\"}},\"inheritFrom\":\"bind\"}},\"maxConnectionAttempts\":5,\"queries\":{\"explicit\":{\"credential-internaluser-query\":{\"_queryFilter\":\"/_id eq \\\"${username}\\\"\"},\"credential-query\":{\"_queryFilter\":\"/userName eq \\\"${username}\\\"\"},\"for-userName\":{\"_queryFilter\":\"/userName eq \\\"${uid}\\\"\"},\"links-for-firstId\":{\"_queryFilter\":\"/linkType eq \\\"${linkType}\\\" AND /firstId = \\\"${firstId}\\\"\"},\"links-for-linkType\":{\"_queryFilter\":\"/linkType eq \\\"${linkType}\\\"\"},\"query-all\":{\"_queryFilter\":\"true\"},\"query-all-ids\":{\"_fields\":\"_id,_rev\",\"_queryFilter\":\"true\"}},\"generic\":{\"credential-internaluser-query\":{\"_queryFilter\":\"/_id eq \\\"${username}\\\"\"},\"credential-query\":{\"_queryFilter\":\"/userName eq \\\"${username}\\\"\"},\"find-relationship-edges\":{\"_queryFilter\":\"((/firstResourceCollection eq \\\"${firstResourceCollection}\\\" and /firstResourceId eq \\\"${firstResourceId}\\\" and /firstPropertyName eq \\\"${firstPropertyName}\\\") and (/secondResourceCollection eq \\\"${secondResourceCollection}\\\" and /secondResourceId eq \\\"${secondResourceId}\\\" and /secondPropertyName eq \\\"${secondPropertyName}\\\")) or ((/firstResourceCollection eq \\\"${secondResourceCollection}\\\" and /firstResourceId eq \\\"${secondResourceId}\\\" and /firstPropertyName eq \\\"${secondPropertyName}\\\") and (/secondResourceCollection eq \\\"${firstResourceCollection}\\\" and /secondResourceId eq \\\"${firstResourceId}\\\" and /secondPropertyName eq \\\"${firstPropertyName}\\\"))\"},\"find-relationships-for-resource\":{\"_queryFilter\":\"(/firstResourceCollection eq \\\"${resourceCollection}\\\" and /firstResourceId eq \\\"${resourceId}\\\" and /firstPropertyName eq \\\"${propertyName}\\\") or (/secondResourceCollection eq \\\"${resourceCollection}\\\" and /secondResourceId eq \\\"${resourceId}\\\" and /secondPropertyName eq \\\"${propertyName}\\\")\"},\"for-userName\":{\"_queryFilter\":\"/userName eq \\\"${uid}\\\"\"},\"get-by-field-value\":{\"_queryFilter\":\"/${field} eq \\\"${value}\\\"\"},\"get-notifications-for-user\":{\"_queryFilter\":\"/receiverId eq \\\"${userId}\\\"\",\"_sortKeys\":\"-createDate\"},\"get-recons\":{\"_fields\":\"reconId,mapping,activitydate\",\"_queryFilter\":\"/entryType eq \\\"summary\\\"\",\"_sortKeys\":\"-activitydate\"},\"links-for-firstId\":{\"_queryFilter\":\"/linkType eq \\\"${linkType}\\\" AND /firstId = \\\"${firstId}\\\"\"},\"links-for-linkType\":{\"_queryFilter\":\"/linkType eq \\\"${linkType}\\\"\"},\"query-all\":{\"_queryFilter\":\"true\"},\"query-all-ids\":{\"_fields\":\"_id,_rev\",\"_queryFilter\":\"true\"},\"query-cluster-events\":{\"_queryFilter\":\"/instanceId eq \\\"${instanceId}\\\"\"},\"query-cluster-failed-instances\":{\"_queryFilter\":\"/timestamp le ${timestamp} and (/state eq \\\"1\\\" or /state eq \\\"2\\\")\"},\"query-cluster-instances\":{\"_queryFilter\":\"true\"},\"query-cluster-running-instances\":{\"_queryFilter\":\"/state eq 1\"}}},\"resourceMapping\":{\"defaultMapping\":{\"dnTemplate\":\"ou=generic,dc=openidm,dc=example,dc=com\"},\"explicitMapping\":{\"clusteredrecontargetids\":{\"dnTemplate\":\"ou=clusteredrecontargetids,dc=openidm,dc=example,dc=com\",\"objectClasses\":[\"uidObject\",\"fr-idm-recon-clusteredTargetIds\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"uid\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"reconId\":{\"ldapAttribute\":\"fr-idm-recon-id\",\"type\":\"simple\"},\"targetIds\":{\"ldapAttribute\":\"fr-idm-recon-targetIds\",\"type\":\"json\"}}},\"dsconfig/attributeValue\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-attribute-value-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"checkSubstrings\":{\"ldapAttribute\":\"ds-cfg-check-substrings\",\"type\":\"simple\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"matchAttribute\":{\"isMultiValued\":true,\"ldapAttribute\":\"ds-cfg-match-attribute\",\"type\":\"simple\"},\"minSubstringLength\":{\"ldapAttribute\":\"ds-cfg-min-substring-length\",\"type\":\"simple\"},\"testReversedPassword\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-test-reversed-password\",\"type\":\"simple\"}}},\"dsconfig/characterSet\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-character-set-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"allowUnclassifiedCharacters\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-allow-unclassified-characters\",\"type\":\"simple\"},\"characterSet\":{\"isMultiValued\":true,\"ldapAttribute\":\"ds-cfg-character-set\",\"type\":\"simple\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"minCharacterSets\":{\"ldapAttribute\":\"ds-cfg-min-character-sets\",\"type\":\"simple\"}}},\"dsconfig/dictionary\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-dictionary-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"caseSensitiveValidation\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-case-sensitive-validation\",\"type\":\"simple\"},\"checkSubstrings\":{\"ldapAttribute\":\"ds-cfg-check-substrings\",\"type\":\"simple\"},\"dictionaryFile\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-dictionary-file\",\"type\":\"simple\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"minSubstringLength\":{\"ldapAttribute\":\"ds-cfg-min-substring-length\",\"type\":\"simple\"},\"testReversedPassword\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-test-reversed-password\",\"type\":\"simple\"}}},\"dsconfig/lengthBased\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-length-based-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"maxPasswordLength\":{\"ldapAttribute\":\"ds-cfg-max-password-length\",\"type\":\"simple\"},\"minPasswordLength\":{\"ldapAttribute\":\"ds-cfg-min-password-length\",\"type\":\"simple\"}}},\"dsconfig/passwordPolicies\":{\"dnTemplate\":\"cn=Password Policies,cn=config\",\"objectClasses\":[\"ds-cfg-password-policy\",\"ds-cfg-authentication-policy\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"allowPreEncodedPasswords\":{\"ldapAttribute\":\"ds-cfg-allow-pre-encoded-passwords\",\"type\":\"simple\"},\"defaultPasswordStorageScheme\":{\"isMultiValued\":true,\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-default-password-storage-scheme\",\"type\":\"simple\"},\"deprecatedPasswordStorageScheme\":{\"isMultiValued\":true,\"ldapAttribute\":\"ds-cfg-deprecated-password-storage-scheme\",\"type\":\"simple\"},\"maxPasswordAge\":{\"ldapAttribute\":\"ds-cfg-max-password-age\",\"type\":\"simple\"},\"passwordAttribute\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-password-attribute\",\"type\":\"simple\"},\"passwordHistoryCount\":{\"ldapAttribute\":\"ds-cfg-password-history-count\",\"type\":\"simple\"},\"validator\":{\"isMultiValued\":true,\"ldapAttribute\":\"ds-cfg-password-validator\",\"type\":\"simple\"}}},\"dsconfig/repeatedCharacters\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-repeated-characters-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"caseSensitiveValidation\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-case-sensitive-validation\",\"type\":\"simple\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"maxConsecutiveLength\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-max-consecutive-length\",\"type\":\"simple\"}}},\"dsconfig/similarityBased\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-similarity-based-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"minPasswordDifference\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-min-password-difference\",\"type\":\"simple\"}}},\"dsconfig/uniqueCharacters\":{\"dnTemplate\":\"cn=Password Validators,cn=config\",\"objectClasses\":[\"ds-cfg-password-validator\",\"ds-cfg-unique-characters-password-validator\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"caseSensitiveValidation\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-case-sensitive-validation\",\"type\":\"simple\"},\"enabled\":{\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"javaClass\":{\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"minUniqueCharacters\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-min-unique-characters\",\"type\":\"simple\"}}},\"dsconfig/userDefinedVirtualAttribute\":{\"dnTemplate\":\"cn=Virtual Attributes,cn=config\",\"objectClasses\":[\"ds-cfg-user-defined-virtual-attribute\",\"ds-cfg-virtual-attribute\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"attributeType\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-attribute-type\",\"type\":\"simple\"},\"baseDn\":{\"isMultiValued\":true,\"ldapAttribute\":\"ds-cfg-base-dn\",\"type\":\"simple\"},\"conflictBehavior\":{\"ldapAttribute\":\"ds-cfg-conflict-behavior\",\"type\":\"simple\"},\"enabled\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-enabled\",\"type\":\"simple\"},\"filter\":{\"isMultiValued\":true,\"ldapAttribute\":\"ds-cfg-filter\",\"type\":\"simple\"},\"groupDn\":{\"ldapAttribute\":\"ds-cfg-group-dn\",\"type\":\"simple\"},\"javaClass\":{\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-java-class\",\"type\":\"simple\"},\"scope\":{\"ldapAttribute\":\"ds-cfg-scope\",\"type\":\"simple\"},\"value\":{\"isMultiValued\":true,\"isRequired\":true,\"ldapAttribute\":\"ds-cfg-value\",\"type\":\"simple\"}}},\"identities/admin\":{\"dnTemplate\":\"o=root,ou=identities\",\"isReadOnly\":true,\"namingStrategy\":{\"dnAttribute\":\"ou\",\"type\":\"clientDnNaming\"},\"objectClasses\":[\"organizationalunit\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"ou\",\"primaryKey\":true,\"type\":\"simple\"},\"count\":{\"isRequired\":true,\"ldapAttribute\":\"numSubordinates\",\"type\":\"simple\",\"writability\":\"readOnly\"}}},\"identities/alpha\":{\"dnTemplate\":\"o=alpha,o=root,ou=identities\",\"isReadOnly\":true,\"namingStrategy\":{\"dnAttribute\":\"ou\",\"type\":\"clientDnNaming\"},\"objectClasses\":[\"organizationalunit\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"ou\",\"primaryKey\":true,\"type\":\"simple\"},\"count\":{\"isRequired\":true,\"ldapAttribute\":\"numSubordinates\",\"type\":\"simple\",\"writability\":\"readOnly\"}}},\"identities/bravo\":{\"dnTemplate\":\"o=bravo,o=root,ou=identities\",\"isReadOnly\":true,\"namingStrategy\":{\"dnAttribute\":\"ou\",\"type\":\"clientDnNaming\"},\"objectClasses\":[\"organizationalunit\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"ou\",\"primaryKey\":true,\"type\":\"simple\"},\"count\":{\"isRequired\":true,\"ldapAttribute\":\"numSubordinates\",\"type\":\"simple\",\"writability\":\"readOnly\"}}},\"internal/role\":{\"dnTemplate\":\"ou=roles,ou=internal,dc=openidm,dc=example,dc=com\",\"objectClasses\":[\"fr-idm-internal-role\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"cn\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"authzMembers\":{\"isMultiValued\":true,\"propertyName\":\"authzRoles\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"},\"condition\":{\"ldapAttribute\":\"fr-idm-condition\",\"type\":\"simple\"},\"description\":{\"ldapAttribute\":\"description\",\"type\":\"simple\"},\"name\":{\"ldapAttribute\":\"fr-idm-name\",\"type\":\"simple\"},\"privileges\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-privilege\",\"type\":\"json\"},\"temporalConstraints\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-temporal-constraints\",\"type\":\"json\"}}},\"internal/user\":{\"dnTemplate\":\"ou=users,ou=internal,dc=openidm,dc=example,dc=com\",\"objectClasses\":[\"uidObject\",\"fr-idm-internal-user\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"uid\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"password\":{\"ldapAttribute\":\"fr-idm-password\",\"type\":\"json\"}}},\"link\":{\"dnTemplate\":\"ou=links,dc=openidm,dc=example,dc=com\",\"objectClasses\":[\"uidObject\",\"fr-idm-link\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"uid\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"firstId\":{\"ldapAttribute\":\"fr-idm-link-firstId\",\"type\":\"simple\"},\"linkQualifier\":{\"ldapAttribute\":\"fr-idm-link-qualifier\",\"type\":\"simple\"},\"linkType\":{\"ldapAttribute\":\"fr-idm-link-type\",\"type\":\"simple\"},\"secondId\":{\"ldapAttribute\":\"fr-idm-link-secondId\",\"type\":\"simple\"}}},\"locks\":{\"dnTemplate\":\"ou=locks,dc=openidm,dc=example,dc=com\",\"objectClasses\":[\"uidObject\",\"fr-idm-lock\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"uid\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"nodeId\":{\"ldapAttribute\":\"fr-idm-lock-nodeid\",\"type\":\"simple\"}}},\"managed/teammember\":{\"dnTemplate\":\"ou=people,o=root,ou=identities\",\"namingStrategy\":{\"dnAttribute\":\"fr-idm-uuid\",\"type\":\"clientDnNaming\"},\"nativeId\":false,\"objectClasses\":[\"person\",\"organizationalPerson\",\"inetOrgPerson\",\"fraas-admin\",\"iplanet-am-user-service\",\"deviceProfilesContainer\",\"devicePrintProfilesContainer\",\"kbaInfoContainer\",\"fr-idm-managed-user-explicit\",\"forgerock-am-dashboard-service\",\"inetuser\",\"iplanet-am-auth-configuration-service\",\"iplanet-am-managed-person\",\"iPlanetPreferences\",\"oathDeviceProfilesContainer\",\"pushDeviceProfilesContainer\",\"sunAMAuthAccountLockout\",\"sunFMSAML2NameIdentifier\",\"webauthnDeviceProfilesContainer\",\"fr-idm-hybrid-obj\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"fr-idm-uuid\",\"primaryKey\":true,\"type\":\"simple\"},\"_meta\":{\"isMultiValued\":false,\"ldapAttribute\":\"fr-idm-managed-user-meta\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/teammembermeta\",\"type\":\"reference\"},\"accountStatus\":{\"ldapAttribute\":\"inetUserStatus\",\"type\":\"simple\"},\"cn\":{\"ldapAttribute\":\"cn\",\"type\":\"simple\"},\"givenName\":{\"ldapAttribute\":\"givenName\",\"type\":\"simple\"},\"inviteDate\":{\"ldapAttribute\":\"fr-idm-inviteDate\",\"type\":\"simple\"},\"jurisdiction\":{\"ldapAttribute\":\"fr-idm-jurisdiction\",\"type\":\"simple\"},\"mail\":{\"ldapAttribute\":\"mail\",\"type\":\"simple\"},\"onboardDate\":{\"ldapAttribute\":\"fr-idm-onboardDate\",\"type\":\"simple\"},\"password\":{\"ldapAttribute\":\"userPassword\",\"type\":\"simple\"},\"sn\":{\"ldapAttribute\":\"sn\",\"type\":\"simple\"},\"userName\":{\"ldapAttribute\":\"uid\",\"type\":\"simple\"}}},\"managed/teammembergroup\":{\"dnTemplate\":\"ou=groups,o=root,ou=identities\",\"objectClasses\":[\"groupofuniquenames\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"cn\",\"primaryKey\":true,\"type\":\"simple\"},\"members\":{\"isMultiValued\":true,\"ldapAttribute\":\"uniqueMember\",\"type\":\"simple\"}}},\"recon/assoc\":{\"dnTemplate\":\"ou=assoc,ou=recon,dc=openidm,dc=example,dc=com\",\"namingStrategy\":{\"dnAttribute\":\"fr-idm-reconassoc-reconid\",\"type\":\"clientDnNaming\"},\"objectClasses\":[\"fr-idm-reconassoc\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"fr-idm-reconassoc-reconid\",\"type\":\"simple\"},\"finishTime\":{\"ldapAttribute\":\"fr-idm-reconassoc-finishtime\",\"type\":\"simple\"},\"isAnalysis\":{\"ldapAttribute\":\"fr-idm-reconassoc-isanalysis\",\"type\":\"simple\"},\"mapping\":{\"ldapAttribute\":\"fr-idm-reconassoc-mapping\",\"type\":\"simple\"},\"sourceResourceCollection\":{\"ldapAttribute\":\"fr-idm-reconassoc-sourceresourcecollection\",\"type\":\"simple\"},\"targetResourceCollection\":{\"ldapAttribute\":\"fr-idm-reconassoc-targetresourcecollection\",\"type\":\"simple\"}},\"subResources\":{\"entry\":{\"namingStrategy\":{\"dnAttribute\":\"uid\",\"type\":\"clientDnNaming\"},\"resource\":\"recon-assoc-entry\",\"type\":\"collection\"}}},\"recon/assoc/entry\":{\"objectClasses\":[\"uidObject\",\"fr-idm-reconassocentry\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"uid\",\"type\":\"simple\"},\"action\":{\"ldapAttribute\":\"fr-idm-reconassocentry-action\",\"type\":\"simple\"},\"ambiguousTargetObjectIds\":{\"ldapAttribute\":\"fr-idm-reconassocentry-ambiguoustargetobjectids\",\"type\":\"simple\"},\"exception\":{\"ldapAttribute\":\"fr-idm-reconassocentry-exception\",\"type\":\"simple\"},\"isAnalysis\":{\"ldapAttribute\":\"fr-idm-reconassoc-isanalysis\",\"type\":\"simple\"},\"linkQualifier\":{\"ldapAttribute\":\"fr-idm-reconassocentry-linkqualifier\",\"type\":\"simple\"},\"mapping\":{\"ldapAttribute\":\"fr-idm-reconassoc-mapping\",\"type\":\"simple\"},\"message\":{\"ldapAttribute\":\"fr-idm-reconassocentry-message\",\"type\":\"simple\"},\"messageDetail\":{\"ldapAttribute\":\"fr-idm-reconassocentry-messagedetail\",\"type\":\"simple\"},\"phase\":{\"ldapAttribute\":\"fr-idm-reconassocentry-phase\",\"type\":\"simple\"},\"reconId\":{\"ldapAttribute\":\"fr-idm-reconassocentry-reconid\",\"type\":\"simple\"},\"situation\":{\"ldapAttribute\":\"fr-idm-reconassocentry-situation\",\"type\":\"simple\"},\"sourceObjectId\":{\"ldapAttribute\":\"fr-idm-reconassocentry-sourceObjectId\",\"type\":\"simple\"},\"sourceResourceCollection\":{\"ldapAttribute\":\"fr-idm-reconassoc-sourceresourcecollection\",\"type\":\"simple\"},\"status\":{\"ldapAttribute\":\"fr-idm-reconassocentry-status\",\"type\":\"simple\"},\"targetObjectId\":{\"ldapAttribute\":\"fr-idm-reconassocentry-targetObjectId\",\"type\":\"simple\"},\"targetResourceCollection\":{\"ldapAttribute\":\"fr-idm-reconassoc-targetresourcecollection\",\"type\":\"simple\"}},\"resourceName\":\"recon-assoc-entry\",\"subResourceRouting\":[{\"prefix\":\"entry\",\"template\":\"recon/assoc/{reconId}/entry\"}]},\"sync/queue\":{\"dnTemplate\":\"ou=queue,ou=sync,dc=openidm,dc=example,dc=com\",\"objectClasses\":[\"uidObject\",\"fr-idm-syncqueue\"],\"properties\":{\"_id\":{\"isRequired\":true,\"ldapAttribute\":\"uid\",\"type\":\"simple\",\"writability\":\"createOnly\"},\"context\":{\"ldapAttribute\":\"fr-idm-syncqueue-context\",\"type\":\"json\"},\"createDate\":{\"ldapAttribute\":\"fr-idm-syncqueue-createdate\",\"type\":\"simple\"},\"mapping\":{\"ldapAttribute\":\"fr-idm-syncqueue-mapping\",\"type\":\"simple\"},\"newObject\":{\"ldapAttribute\":\"fr-idm-syncqueue-newobject\",\"type\":\"json\"},\"nodeId\":{\"ldapAttribute\":\"fr-idm-syncqueue-nodeid\",\"type\":\"simple\"},\"objectRev\":{\"ldapAttribute\":\"fr-idm-syncqueue-objectRev\",\"type\":\"simple\"},\"oldObject\":{\"ldapAttribute\":\"fr-idm-syncqueue-oldobject\",\"type\":\"json\"},\"remainingRetries\":{\"ldapAttribute\":\"fr-idm-syncqueue-remainingretries\",\"type\":\"simple\"},\"resourceCollection\":{\"ldapAttribute\":\"fr-idm-syncqueue-resourcecollection\",\"type\":\"simple\"},\"resourceId\":{\"ldapAttribute\":\"fr-idm-syncqueue-resourceid\",\"type\":\"simple\"},\"state\":{\"ldapAttribute\":\"fr-idm-syncqueue-state\",\"type\":\"simple\"},\"syncAction\":{\"ldapAttribute\":\"fr-idm-syncqueue-syncaction\",\"type\":\"simple\"}}}},\"genericMapping\":{\"cluster/*\":{\"dnTemplate\":\"ou=cluster,dc=openidm,dc=example,dc=com\",\"jsonAttribute\":\"fr-idm-cluster-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatchClusterObject\",\"objectClasses\":[\"uidObject\",\"fr-idm-cluster-obj\"]},\"config\":{\"dnTemplate\":\"ou=config,dc=openidm,dc=example,dc=com\"},\"file\":{\"dnTemplate\":\"ou=file,dc=openidm,dc=example,dc=com\"},\"internal/notification\":{\"dnTemplate\":\"ou=notification,ou=internal,dc=openidm,dc=example,dc=com\",\"jsonAttribute\":\"fr-idm-notification-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-notification\"],\"properties\":{\"target\":{\"propertyName\":\"_notifications\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"}}},\"internal/usermeta\":{\"dnTemplate\":\"ou=usermeta,ou=internal,dc=openidm,dc=example,dc=com\",\"jsonAttribute\":\"fr-idm-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-generic-obj\"],\"properties\":{\"target\":{\"propertyName\":\"_meta\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"}}},\"jsonstorage\":{\"dnTemplate\":\"ou=jsonstorage,dc=openidm,dc=example,dc=com\"},\"managed/*\":{\"dnTemplate\":\"ou=managed,dc=openidm,dc=example,dc=com\"},\"managed/alpha_group\":{\"dnTemplate\":\"ou=groups,o=alpha,o=root,ou=identities\",\"idGenerator\":{\"propertyName\":\"name\",\"type\":\"property\"},\"jsonAttribute\":\"fr-idm-managed-group-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"namingStrategy\":{\"dnAttribute\":\"cn\",\"type\":\"clientDnNaming\"},\"nativeId\":false,\"objectClasses\":[\"top\",\"groupOfURLs\",\"fr-idm-managed-group\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"cn\",\"primaryKey\":true,\"type\":\"simple\",\"writability\":\"createOnly\"},\"condition\":{\"ldapAttribute\":\"fr-idm-managed-group-condition\",\"type\":\"simple\"},\"description\":{\"ldapAttribute\":\"description\",\"type\":\"simple\"},\"members\":{\"isMultiValued\":true,\"propertyName\":\"groups\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"}}},\"managed/alpha_organization\":{\"dnTemplate\":\"ou=organization,o=alpha,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-managed-organization-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-managed-organization\",\"fr-ext-attrs\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"uid\",\"type\":\"simple\"},\"admins\":{\"isMultiValued\":true,\"propertyName\":\"adminOfOrg\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"},\"children\":{\"isMultiValued\":true,\"propertyName\":\"parent\",\"resourcePath\":\"managed/alpha_organization\",\"type\":\"reverseReference\"},\"members\":{\"isMultiValued\":true,\"propertyName\":\"memberOfOrg\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"},\"name\":{\"ldapAttribute\":\"fr-idm-managed-organization-name\",\"type\":\"simple\"},\"owners\":{\"isMultiValued\":true,\"propertyName\":\"ownerOfOrg\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"},\"parent\":{\"ldapAttribute\":\"fr-idm-managed-organization-parent\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_organization\",\"type\":\"reference\"}}},\"managed/alpha_role\":{\"dnTemplate\":\"ou=role,o=alpha,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-managed-role-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatchManagedRole\",\"objectClasses\":[\"uidObject\",\"fr-idm-managed-role\"],\"properties\":{\"members\":{\"isMultiValued\":true,\"propertyName\":\"roles\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"}}},\"managed/alpha_user\":{\"dnTemplate\":\"ou=user,o=alpha,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-custom-attrs\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"namingStrategy\":{\"dnAttribute\":\"fr-idm-uuid\",\"type\":\"clientDnNaming\"},\"nativeId\":false,\"objectClasses\":[\"person\",\"organizationalPerson\",\"inetOrgPerson\",\"iplanet-am-user-service\",\"devicePrintProfilesContainer\",\"deviceProfilesContainer\",\"kbaInfoContainer\",\"fr-idm-managed-user-explicit\",\"forgerock-am-dashboard-service\",\"inetuser\",\"iplanet-am-auth-configuration-service\",\"iplanet-am-managed-person\",\"iPlanetPreferences\",\"oathDeviceProfilesContainer\",\"pushDeviceProfilesContainer\",\"sunAMAuthAccountLockout\",\"sunFMSAML2NameIdentifier\",\"webauthnDeviceProfilesContainer\",\"fr-idm-hybrid-obj\",\"fr-ext-attrs\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"fr-idm-uuid\",\"primaryKey\":true,\"type\":\"simple\"},\"_meta\":{\"isMultiValued\":false,\"ldapAttribute\":\"fr-idm-managed-user-meta\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_usermeta\",\"type\":\"reference\"},\"_notifications\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-notifications\",\"primaryKey\":\"uid\",\"resourcePath\":\"internal/notification\",\"type\":\"reference\"},\"accountStatus\":{\"ldapAttribute\":\"inetUserStatus\",\"type\":\"simple\"},\"adminOfOrg\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-organization-admin\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_organization\",\"type\":\"reference\"},\"aliasList\":{\"isMultiValued\":true,\"ldapAttribute\":\"iplanet-am-user-alias-list\",\"type\":\"simple\"},\"assignedDashboard\":{\"isMultiValued\":true,\"ldapAttribute\":\"assignedDashboard\",\"type\":\"simple\"},\"authzRoles\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-authzroles-internal-role\",\"primaryKey\":\"cn\",\"resourcePath\":\"internal/role\",\"type\":\"reference\"},\"city\":{\"ldapAttribute\":\"l\",\"type\":\"simple\"},\"cn\":{\"ldapAttribute\":\"cn\",\"type\":\"simple\"},\"consentedMappings\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-consentedMapping\",\"type\":\"json\"},\"country\":{\"ldapAttribute\":\"co\",\"type\":\"simple\"},\"description\":{\"ldapAttribute\":\"description\",\"type\":\"simple\"},\"displayName\":{\"ldapAttribute\":\"displayName\",\"type\":\"simple\"},\"effectiveAssignments\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-effectiveAssignment\",\"type\":\"json\"},\"effectiveGroups\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-effectiveGroup\",\"type\":\"json\"},\"effectiveRoles\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-effectiveRole\",\"type\":\"json\"},\"frIndexedDate1\":{\"ldapAttribute\":\"fr-attr-idate1\",\"type\":\"simple\"},\"frIndexedDate2\":{\"ldapAttribute\":\"fr-attr-idate2\",\"type\":\"simple\"},\"frIndexedDate3\":{\"ldapAttribute\":\"fr-attr-idate3\",\"type\":\"simple\"},\"frIndexedDate4\":{\"ldapAttribute\":\"fr-attr-idate4\",\"type\":\"simple\"},\"frIndexedDate5\":{\"ldapAttribute\":\"fr-attr-idate5\",\"type\":\"simple\"},\"frIndexedInteger1\":{\"ldapAttribute\":\"fr-attr-iint1\",\"type\":\"simple\"},\"frIndexedInteger2\":{\"ldapAttribute\":\"fr-attr-iint2\",\"type\":\"simple\"},\"frIndexedInteger3\":{\"ldapAttribute\":\"fr-attr-iint3\",\"type\":\"simple\"},\"frIndexedInteger4\":{\"ldapAttribute\":\"fr-attr-iint4\",\"type\":\"simple\"},\"frIndexedInteger5\":{\"ldapAttribute\":\"fr-attr-iint5\",\"type\":\"simple\"},\"frIndexedMultivalued1\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti1\",\"type\":\"simple\"},\"frIndexedMultivalued2\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti2\",\"type\":\"simple\"},\"frIndexedMultivalued3\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti3\",\"type\":\"simple\"},\"frIndexedMultivalued4\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti4\",\"type\":\"simple\"},\"frIndexedMultivalued5\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti5\",\"type\":\"simple\"},\"frIndexedString1\":{\"ldapAttribute\":\"fr-attr-istr1\",\"type\":\"simple\"},\"frIndexedString2\":{\"ldapAttribute\":\"fr-attr-istr2\",\"type\":\"simple\"},\"frIndexedString3\":{\"ldapAttribute\":\"fr-attr-istr3\",\"type\":\"simple\"},\"frIndexedString4\":{\"ldapAttribute\":\"fr-attr-istr4\",\"type\":\"simple\"},\"frIndexedString5\":{\"ldapAttribute\":\"fr-attr-istr5\",\"type\":\"simple\"},\"frUnindexedDate1\":{\"ldapAttribute\":\"fr-attr-date1\",\"type\":\"simple\"},\"frUnindexedDate2\":{\"ldapAttribute\":\"fr-attr-date2\",\"type\":\"simple\"},\"frUnindexedDate3\":{\"ldapAttribute\":\"fr-attr-date3\",\"type\":\"simple\"},\"frUnindexedDate4\":{\"ldapAttribute\":\"fr-attr-date4\",\"type\":\"simple\"},\"frUnindexedDate5\":{\"ldapAttribute\":\"fr-attr-date5\",\"type\":\"simple\"},\"frUnindexedInteger1\":{\"ldapAttribute\":\"fr-attr-int1\",\"type\":\"simple\"},\"frUnindexedInteger2\":{\"ldapAttribute\":\"fr-attr-int2\",\"type\":\"simple\"},\"frUnindexedInteger3\":{\"ldapAttribute\":\"fr-attr-int3\",\"type\":\"simple\"},\"frUnindexedInteger4\":{\"ldapAttribute\":\"fr-attr-int4\",\"type\":\"simple\"},\"frUnindexedInteger5\":{\"ldapAttribute\":\"fr-attr-int5\",\"type\":\"simple\"},\"frUnindexedMultivalued1\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi1\",\"type\":\"simple\"},\"frUnindexedMultivalued2\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi2\",\"type\":\"simple\"},\"frUnindexedMultivalued3\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi3\",\"type\":\"simple\"},\"frUnindexedMultivalued4\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi4\",\"type\":\"simple\"},\"frUnindexedMultivalued5\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi5\",\"type\":\"simple\"},\"frUnindexedString1\":{\"ldapAttribute\":\"fr-attr-str1\",\"type\":\"simple\"},\"frUnindexedString2\":{\"ldapAttribute\":\"fr-attr-str2\",\"type\":\"simple\"},\"frUnindexedString3\":{\"ldapAttribute\":\"fr-attr-str3\",\"type\":\"simple\"},\"frUnindexedString4\":{\"ldapAttribute\":\"fr-attr-str4\",\"type\":\"simple\"},\"frUnindexedString5\":{\"ldapAttribute\":\"fr-attr-str5\",\"type\":\"simple\"},\"givenName\":{\"ldapAttribute\":\"givenName\",\"type\":\"simple\"},\"groups\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-groups\",\"primaryKey\":\"cn\",\"resourcePath\":\"managed/alpha_group\",\"type\":\"reference\"},\"kbaInfo\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-kbaInfo\",\"type\":\"json\"},\"lastSync\":{\"ldapAttribute\":\"fr-idm-lastSync\",\"type\":\"json\"},\"mail\":{\"ldapAttribute\":\"mail\",\"type\":\"simple\"},\"manager\":{\"isMultiValued\":false,\"ldapAttribute\":\"fr-idm-managed-user-manager\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reference\"},\"memberOfOrg\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-organization-member\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_organization\",\"type\":\"reference\"},\"memberOfOrgIDs\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-memberoforgid\",\"type\":\"simple\"},\"ownerOfOrg\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-organization-owner\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_organization\",\"type\":\"reference\"},\"password\":{\"ldapAttribute\":\"userPassword\",\"type\":\"simple\"},\"postalAddress\":{\"ldapAttribute\":\"street\",\"type\":\"simple\"},\"postalCode\":{\"ldapAttribute\":\"postalCode\",\"type\":\"simple\"},\"preferences\":{\"ldapAttribute\":\"fr-idm-preferences\",\"type\":\"json\"},\"profileImage\":{\"ldapAttribute\":\"labeledURI\",\"type\":\"simple\"},\"reports\":{\"isMultiValued\":true,\"propertyName\":\"manager\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"},\"roles\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-roles\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/alpha_role\",\"type\":\"reference\"},\"sn\":{\"ldapAttribute\":\"sn\",\"type\":\"simple\"},\"stateProvince\":{\"ldapAttribute\":\"st\",\"type\":\"simple\"},\"telephoneNumber\":{\"ldapAttribute\":\"telephoneNumber\",\"type\":\"simple\"},\"userName\":{\"ldapAttribute\":\"uid\",\"type\":\"simple\"}}},\"managed/alpha_usermeta\":{\"dnTemplate\":\"ou=usermeta,o=alpha,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-generic-obj\"],\"properties\":{\"target\":{\"propertyName\":\"_meta\",\"resourcePath\":\"managed/alpha_user\",\"type\":\"reverseReference\"}}},\"managed/bravo_group\":{\"dnTemplate\":\"ou=groups,o=bravo,o=root,ou=identities\",\"idGenerator\":{\"propertyName\":\"name\",\"type\":\"property\"},\"jsonAttribute\":\"fr-idm-managed-group-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"namingStrategy\":{\"dnAttribute\":\"cn\",\"type\":\"clientDnNaming\"},\"nativeId\":false,\"objectClasses\":[\"top\",\"groupOfURLs\",\"fr-idm-managed-group\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"cn\",\"primaryKey\":true,\"type\":\"simple\",\"writability\":\"createOnly\"},\"condition\":{\"ldapAttribute\":\"fr-idm-managed-group-condition\",\"type\":\"simple\"},\"description\":{\"ldapAttribute\":\"description\",\"type\":\"simple\"},\"members\":{\"isMultiValued\":true,\"propertyName\":\"groups\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"}}},\"managed/bravo_organization\":{\"dnTemplate\":\"ou=organization,o=bravo,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-managed-organization-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-managed-organization\",\"fr-ext-attrs\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"uid\",\"type\":\"simple\"},\"admins\":{\"isMultiValued\":true,\"propertyName\":\"adminOfOrg\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"},\"children\":{\"isMultiValued\":true,\"propertyName\":\"parent\",\"resourcePath\":\"managed/bravo_organization\",\"type\":\"reverseReference\"},\"members\":{\"isMultiValued\":true,\"propertyName\":\"memberOfOrg\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"},\"name\":{\"ldapAttribute\":\"fr-idm-managed-organization-name\",\"type\":\"simple\"},\"owners\":{\"isMultiValued\":true,\"propertyName\":\"ownerOfOrg\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"},\"parent\":{\"ldapAttribute\":\"fr-idm-managed-organization-parent\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_organization\",\"type\":\"reference\"}}},\"managed/bravo_role\":{\"dnTemplate\":\"ou=role,o=bravo,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-managed-role-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatchManagedRole\",\"objectClasses\":[\"uidObject\",\"fr-idm-managed-role\"],\"properties\":{\"members\":{\"isMultiValued\":true,\"propertyName\":\"roles\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"}}},\"managed/bravo_user\":{\"dnTemplate\":\"ou=user,o=bravo,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-custom-attrs\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"namingStrategy\":{\"dnAttribute\":\"fr-idm-uuid\",\"type\":\"clientDnNaming\"},\"nativeId\":false,\"objectClasses\":[\"person\",\"organizationalPerson\",\"inetOrgPerson\",\"iplanet-am-user-service\",\"devicePrintProfilesContainer\",\"deviceProfilesContainer\",\"kbaInfoContainer\",\"fr-idm-managed-user-explicit\",\"forgerock-am-dashboard-service\",\"inetuser\",\"iplanet-am-auth-configuration-service\",\"iplanet-am-managed-person\",\"iPlanetPreferences\",\"oathDeviceProfilesContainer\",\"pushDeviceProfilesContainer\",\"sunAMAuthAccountLockout\",\"sunFMSAML2NameIdentifier\",\"webauthnDeviceProfilesContainer\",\"fr-idm-hybrid-obj\",\"fr-ext-attrs\"],\"properties\":{\"_id\":{\"ldapAttribute\":\"fr-idm-uuid\",\"primaryKey\":true,\"type\":\"simple\"},\"_meta\":{\"isMultiValued\":false,\"ldapAttribute\":\"fr-idm-managed-user-meta\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_usermeta\",\"type\":\"reference\"},\"_notifications\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-notifications\",\"primaryKey\":\"uid\",\"resourcePath\":\"internal/notification\",\"type\":\"reference\"},\"accountStatus\":{\"ldapAttribute\":\"inetUserStatus\",\"type\":\"simple\"},\"adminOfOrg\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-organization-admin\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_organization\",\"type\":\"reference\"},\"aliasList\":{\"isMultiValued\":true,\"ldapAttribute\":\"iplanet-am-user-alias-list\",\"type\":\"simple\"},\"assignedDashboard\":{\"isMultiValued\":true,\"ldapAttribute\":\"assignedDashboard\",\"type\":\"simple\"},\"authzRoles\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-authzroles-internal-role\",\"primaryKey\":\"cn\",\"resourcePath\":\"internal/role\",\"type\":\"reference\"},\"city\":{\"ldapAttribute\":\"l\",\"type\":\"simple\"},\"cn\":{\"ldapAttribute\":\"cn\",\"type\":\"simple\"},\"consentedMappings\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-consentedMapping\",\"type\":\"json\"},\"country\":{\"ldapAttribute\":\"co\",\"type\":\"simple\"},\"description\":{\"ldapAttribute\":\"description\",\"type\":\"simple\"},\"displayName\":{\"ldapAttribute\":\"displayName\",\"type\":\"simple\"},\"effectiveAssignments\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-effectiveAssignment\",\"type\":\"json\"},\"effectiveGroups\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-effectiveGroup\",\"type\":\"json\"},\"effectiveRoles\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-effectiveRole\",\"type\":\"json\"},\"frIndexedDate1\":{\"ldapAttribute\":\"fr-attr-idate1\",\"type\":\"simple\"},\"frIndexedDate2\":{\"ldapAttribute\":\"fr-attr-idate2\",\"type\":\"simple\"},\"frIndexedDate3\":{\"ldapAttribute\":\"fr-attr-idate3\",\"type\":\"simple\"},\"frIndexedDate4\":{\"ldapAttribute\":\"fr-attr-idate4\",\"type\":\"simple\"},\"frIndexedDate5\":{\"ldapAttribute\":\"fr-attr-idate5\",\"type\":\"simple\"},\"frIndexedInteger1\":{\"ldapAttribute\":\"fr-attr-iint1\",\"type\":\"simple\"},\"frIndexedInteger2\":{\"ldapAttribute\":\"fr-attr-iint2\",\"type\":\"simple\"},\"frIndexedInteger3\":{\"ldapAttribute\":\"fr-attr-iint3\",\"type\":\"simple\"},\"frIndexedInteger4\":{\"ldapAttribute\":\"fr-attr-iint4\",\"type\":\"simple\"},\"frIndexedInteger5\":{\"ldapAttribute\":\"fr-attr-iint5\",\"type\":\"simple\"},\"frIndexedMultivalued1\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti1\",\"type\":\"simple\"},\"frIndexedMultivalued2\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti2\",\"type\":\"simple\"},\"frIndexedMultivalued3\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti3\",\"type\":\"simple\"},\"frIndexedMultivalued4\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti4\",\"type\":\"simple\"},\"frIndexedMultivalued5\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-imulti5\",\"type\":\"simple\"},\"frIndexedString1\":{\"ldapAttribute\":\"fr-attr-istr1\",\"type\":\"simple\"},\"frIndexedString2\":{\"ldapAttribute\":\"fr-attr-istr2\",\"type\":\"simple\"},\"frIndexedString3\":{\"ldapAttribute\":\"fr-attr-istr3\",\"type\":\"simple\"},\"frIndexedString4\":{\"ldapAttribute\":\"fr-attr-istr4\",\"type\":\"simple\"},\"frIndexedString5\":{\"ldapAttribute\":\"fr-attr-istr5\",\"type\":\"simple\"},\"frUnindexedDate1\":{\"ldapAttribute\":\"fr-attr-date1\",\"type\":\"simple\"},\"frUnindexedDate2\":{\"ldapAttribute\":\"fr-attr-date2\",\"type\":\"simple\"},\"frUnindexedDate3\":{\"ldapAttribute\":\"fr-attr-date3\",\"type\":\"simple\"},\"frUnindexedDate4\":{\"ldapAttribute\":\"fr-attr-date4\",\"type\":\"simple\"},\"frUnindexedDate5\":{\"ldapAttribute\":\"fr-attr-date5\",\"type\":\"simple\"},\"frUnindexedInteger1\":{\"ldapAttribute\":\"fr-attr-int1\",\"type\":\"simple\"},\"frUnindexedInteger2\":{\"ldapAttribute\":\"fr-attr-int2\",\"type\":\"simple\"},\"frUnindexedInteger3\":{\"ldapAttribute\":\"fr-attr-int3\",\"type\":\"simple\"},\"frUnindexedInteger4\":{\"ldapAttribute\":\"fr-attr-int4\",\"type\":\"simple\"},\"frUnindexedInteger5\":{\"ldapAttribute\":\"fr-attr-int5\",\"type\":\"simple\"},\"frUnindexedMultivalued1\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi1\",\"type\":\"simple\"},\"frUnindexedMultivalued2\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi2\",\"type\":\"simple\"},\"frUnindexedMultivalued3\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi3\",\"type\":\"simple\"},\"frUnindexedMultivalued4\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi4\",\"type\":\"simple\"},\"frUnindexedMultivalued5\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-attr-multi5\",\"type\":\"simple\"},\"frUnindexedString1\":{\"ldapAttribute\":\"fr-attr-str1\",\"type\":\"simple\"},\"frUnindexedString2\":{\"ldapAttribute\":\"fr-attr-str2\",\"type\":\"simple\"},\"frUnindexedString3\":{\"ldapAttribute\":\"fr-attr-str3\",\"type\":\"simple\"},\"frUnindexedString4\":{\"ldapAttribute\":\"fr-attr-str4\",\"type\":\"simple\"},\"frUnindexedString5\":{\"ldapAttribute\":\"fr-attr-str5\",\"type\":\"simple\"},\"givenName\":{\"ldapAttribute\":\"givenName\",\"type\":\"simple\"},\"groups\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-groups\",\"primaryKey\":\"cn\",\"resourcePath\":\"managed/bravo_group\",\"type\":\"reference\"},\"kbaInfo\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-kbaInfo\",\"type\":\"json\"},\"lastSync\":{\"ldapAttribute\":\"fr-idm-lastSync\",\"type\":\"json\"},\"mail\":{\"ldapAttribute\":\"mail\",\"type\":\"simple\"},\"manager\":{\"isMultiValued\":false,\"ldapAttribute\":\"fr-idm-managed-user-manager\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reference\"},\"memberOfOrg\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-organization-member\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_organization\",\"type\":\"reference\"},\"memberOfOrgIDs\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-memberoforgid\",\"type\":\"simple\"},\"ownerOfOrg\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-organization-owner\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_organization\",\"type\":\"reference\"},\"password\":{\"ldapAttribute\":\"userPassword\",\"type\":\"simple\"},\"postalAddress\":{\"ldapAttribute\":\"street\",\"type\":\"simple\"},\"postalCode\":{\"ldapAttribute\":\"postalCode\",\"type\":\"simple\"},\"preferences\":{\"ldapAttribute\":\"fr-idm-preferences\",\"type\":\"json\"},\"profileImage\":{\"ldapAttribute\":\"labeledURI\",\"type\":\"simple\"},\"reports\":{\"isMultiValued\":true,\"propertyName\":\"manager\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"},\"roles\":{\"isMultiValued\":true,\"ldapAttribute\":\"fr-idm-managed-user-roles\",\"primaryKey\":\"uid\",\"resourcePath\":\"managed/bravo_role\",\"type\":\"reference\"},\"sn\":{\"ldapAttribute\":\"sn\",\"type\":\"simple\"},\"stateProvince\":{\"ldapAttribute\":\"st\",\"type\":\"simple\"},\"telephoneNumber\":{\"ldapAttribute\":\"telephoneNumber\",\"type\":\"simple\"},\"userName\":{\"ldapAttribute\":\"uid\",\"type\":\"simple\"}}},\"managed/bravo_usermeta\":{\"dnTemplate\":\"ou=usermeta,o=bravo,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-generic-obj\"],\"properties\":{\"target\":{\"propertyName\":\"_meta\",\"resourcePath\":\"managed/bravo_user\",\"type\":\"reverseReference\"}}},\"managed/teammembermeta\":{\"dnTemplate\":\"ou=teammembermeta,o=root,ou=identities\",\"jsonAttribute\":\"fr-idm-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatch\",\"objectClasses\":[\"uidObject\",\"fr-idm-generic-obj\"],\"properties\":{\"target\":{\"propertyName\":\"_meta\",\"resourcePath\":\"managed/teammember\",\"type\":\"reverseReference\"}}},\"reconprogressstate\":{\"dnTemplate\":\"ou=reconprogressstate,dc=openidm,dc=example,dc=com\"},\"relationships\":{\"dnTemplate\":\"ou=relationships,dc=openidm,dc=example,dc=com\",\"jsonAttribute\":\"fr-idm-relationship-json\",\"jsonQueryEqualityMatchingRule\":\"caseIgnoreJsonQueryMatchRelationship\",\"objectClasses\":[\"uidObject\",\"fr-idm-relationship\"]},\"scheduler\":{\"dnTemplate\":\"ou=scheduler,dc=openidm,dc=example,dc=com\"},\"scheduler/*\":{\"dnTemplate\":\"ou=scheduler,dc=openidm,dc=example,dc=com\"},\"ui/*\":{\"dnTemplate\":\"ou=ui,dc=openidm,dc=example,dc=com\"},\"updates\":{\"dnTemplate\":\"ou=updates,dc=openidm,dc=example,dc=com\"}}},\"rest2LdapOptions\":{\"mvccAttribute\":\"etag\",\"readOnUpdatePolicy\":\"controls\",\"returnNullForMissingProperties\":true,\"useMvcc\":true,\"usePermissiveModify\":true,\"useSubtreeDelete\":true},\"security\":{\"keyManager\":\"jvm\",\"trustManager\":\"jvm\"}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 671, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.843Z", - "time": 280, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 280 - } - }, - { - "_id": "9f231197089ead48083fbb1440010a11", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1917, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/router" - }, - "response": { - "bodySize": 29, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 29, - "text": "{\"_id\":\"router\",\"filters\":[]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "29" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 663, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.846Z", - "time": 238, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 238 - } - }, - { - "_id": "0b8355f1ac5870bd599a7d814921a98f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1917, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/script" - }, - "response": { - "bodySize": 1016, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1016, - "text": "{\"_id\":\"script\",\"ECMAScript\":{\"#javascript.debug\":\"&{openidm.script.javascript.debug}\",\"javascript.recompile.minimumInterval\":60000},\"Groovy\":{\"#groovy.disabled.global.ast.transformations\":\"\",\"#groovy.errors.tolerance\":10,\"#groovy.output.debug\":false,\"#groovy.output.verbose\":false,\"#groovy.script.base\":\"#any class extends groovy.lang.Script\",\"#groovy.script.extension\":\".groovy\",\"#groovy.source.encoding\":\"utf-8 #default US-ASCII\",\"#groovy.target.bytecode\":\"1.5\",\"#groovy.target.indy\":true,\"#groovy.warnings\":\"likely errors #othere values [none,likely,possible,paranoia]\",\"groovy.classpath\":\"&{idm.install.dir}/lib\",\"groovy.recompile\":true,\"groovy.recompile.minimumInterval\":60000,\"groovy.source.encoding\":\"UTF-8\",\"groovy.target.directory\":\"&{idm.install.dir}/classes\"},\"properties\":{},\"sources\":{\"default\":{\"directory\":\"&{idm.install.dir}/bin/defaults/script\"},\"install\":{\"directory\":\"&{idm.install.dir}\"},\"project\":{\"directory\":\"&{idm.instance.dir}\"},\"project-script\":{\"directory\":\"&{idm.instance.dir}/script\"}}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1016" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.849Z", - "time": 231, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 231 - } - }, - { - "_id": "372152e7418e4bbb7f1bb2fd5327ca2f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1918, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/secrets" - }, - "response": { - "bodySize": 1863, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1863, - "text": "{\"_id\":\"secrets\",\"populateDefaults\":true,\"stores\":[{\"class\":\"org.forgerock.openidm.secrets.config.FileBasedStore\",\"config\":{\"file\":\"&{openidm.keystore.location|&{idm.install.dir}/security/keystore.jceks}\",\"mappings\":[{\"aliases\":[\"&{openidm.config.crypto.alias|openidm-sym-default}\",\"openidm-localhost\"],\"secretId\":\"idm.default\",\"types\":[\"ENCRYPT\",\"DECRYPT\"]},{\"aliases\":[\"&{openidm.config.crypto.alias|openidm-sym-default}\"],\"secretId\":\"idm.config.encryption\",\"types\":[\"ENCRYPT\",\"DECRYPT\"]},{\"aliases\":[\"&{openidm.config.crypto.alias|openidm-sym-default}\"],\"secretId\":\"idm.password.encryption\",\"types\":[\"ENCRYPT\",\"DECRYPT\"]},{\"aliases\":[\"&{openidm.https.keystore.cert.alias|openidm-localhost}\"],\"secretId\":\"idm.jwt.session.module.encryption\",\"types\":[\"ENCRYPT\",\"DECRYPT\"]},{\"aliases\":[\"&{openidm.config.crypto.jwtsession.hmackey.alias|openidm-jwtsessionhmac-key}\"],\"secretId\":\"idm.jwt.session.module.signing\",\"types\":[\"SIGN\",\"VERIFY\"]},{\"aliases\":[\"selfservice\"],\"secretId\":\"idm.selfservice.encryption\",\"types\":[\"ENCRYPT\",\"DECRYPT\"]},{\"aliases\":[\"&{openidm.config.crypto.selfservice.sharedkey.alias|openidm-selfservice-key}\"],\"secretId\":\"idm.selfservice.signing\",\"types\":[\"SIGN\",\"VERIFY\"]},{\"aliases\":[\"&{openidm.config.crypto.alias|openidm-sym-default}\"],\"secretId\":\"idm.assignment.attribute.encryption\",\"types\":[\"ENCRYPT\",\"DECRYPT\"]}],\"providerName\":\"&{openidm.keystore.provider|SunJCE}\",\"storePassword\":\"&{openidm.keystore.password|changeit}\",\"storetype\":\"&{openidm.keystore.type|JCEKS}\"},\"name\":\"mainKeyStore\"},{\"class\":\"org.forgerock.openidm.secrets.config.FileBasedStore\",\"config\":{\"file\":\"&{openidm.truststore.location|&{idm.install.dir}/security/truststore}\",\"mappings\":[],\"providerName\":\"&{openidm.truststore.provider|SUN}\",\"storePassword\":\"&{openidm.truststore.password|changeit}\",\"storetype\":\"&{openidm.truststore.type|JKS}\"},\"name\":\"mainTrustStore\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1863" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.851Z", - "time": 336, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 336 - } - }, - { - "_id": "31ff64d3e984c38b0c14569db37889ad", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1926, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/selfservice.kba" - }, - "response": { - "bodySize": 162, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 162, - "text": "{\"_id\":\"selfservice.kba\",\"kbaPropertyName\":\"kbaInfo\",\"minimumAnswersToDefine\":1,\"minimumAnswersToVerify\":1,\"questions\":{\"1\":{\"en\":\"What's your favorite color?\"}}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "162" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.854Z", - "time": 190, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 190 - } - }, - { - "_id": "84ee2e3e3f7cef3023dd7241ced2b77a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1928, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/selfservice.terms" - }, - "response": { - "bodySize": 730, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 730, - "text": "{\"_id\":\"selfservice.terms\",\"active\":\"0.0\",\"uiConfig\":{\"buttonText\":\"Accept\",\"displayName\":\"We've updated our terms\",\"purpose\":\"You must accept the updated terms in order to proceed.\"},\"versions\":[{\"createDate\":\"2019-10-28T04:20:11.320Z\",\"termsTranslations\":{\"en\":\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"},\"version\":\"0.0\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "730" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.857Z", - "time": 205, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 205 - } - }, - { - "_id": "6cbf25336f75bed9003dbd20bd94c130", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1929, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/servletfilter/cors" - }, - "response": { - "bodySize": 347, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 347, - "text": "{\"_id\":\"servletfilter/cors\",\"initParams\":{\"allowCredentials\":false,\"allowedHeaders\":\"authorization,accept,content-type,origin,x-requested-with,cache-control,accept-api-version,if-match,if-none-match\",\"allowedMethods\":\"GET,POST,PUT,DELETE,PATCH\",\"allowedOrigins\":\"*\",\"chainPreflight\":false,\"exposedHeaders\":\"WWW-Authenticate\"},\"urlPatterns\":[\"/*\"]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "347" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.859Z", - "time": 294, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 294 - } - }, - { - "_id": "4734d7816408991b39320106367532a9", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1932, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/servletfilter/payload" - }, - "response": { - "bodySize": 121, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 121, - "text": "{\"_id\":\"servletfilter/payload\",\"initParams\":{\"maxRequestSizeInMegabytes\":5},\"urlPatterns\":[\"&{openidm.servlet.alias}/*\"]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "121" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.862Z", - "time": 345, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 345 - } - }, - { - "_id": "479d6a831987c6fbbdfccaa366e89114", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1931, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/servletfilter/upload" - }, - "response": { - "bodySize": 128, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 128, - "text": "{\"_id\":\"servletfilter/upload\",\"initParams\":{\"maxRequestSizeInMegabytes\":50},\"urlPatterns\":[\"&{openidm.servlet.upload.alias}/*\"]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "128" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.864Z", - "time": 351, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 351 - } - }, - { - "_id": "c6aed7f604cb532801a9b95de9922a3c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1927, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/ui.context/admin" - }, - "response": { - "bodySize": 224, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 224, - "text": "{\"_id\":\"ui.context/admin\",\"defaultDir\":\"&{idm.install.dir}/ui/admin/default\",\"enabled\":true,\"extensionDir\":\"&{idm.install.dir}/ui/admin/extension\",\"responseHeaders\":{\"X-Frame-Options\":\"SAMEORIGIN\"},\"urlContextRoot\":\"/admin\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "224" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.869Z", - "time": 319, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 319 - } - }, - { - "_id": "05bacc81732e6f86cfe0b782cdde4f67", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1925, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/ui.context/api" - }, - "response": { - "bodySize": 205, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 205, - "text": "{\"_id\":\"ui.context/api\",\"authEnabled\":true,\"cacheEnabled\":false,\"defaultDir\":\"&{idm.install.dir}/ui/api/default\",\"enabled\":true,\"extensionDir\":\"&{idm.install.dir}/ui/api/extension\",\"urlContextRoot\":\"/api\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "205" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.871Z", - "time": 221, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 221 - } - }, - { - "_id": "17421c1d759655006a294261cc77fd75", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1929, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/ui.context/enduser" - }, - "response": { - "bodySize": 154, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 154, - "text": "{\"_id\":\"ui.context/enduser\",\"defaultDir\":\"&{idm.install.dir}/ui/enduser\",\"enabled\":true,\"responseHeaders\":{\"X-Frame-Options\":\"DENY\"},\"urlContextRoot\":\"/\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "154" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.874Z", - "time": 310, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 310 - } - }, - { - "_id": "61e2740b542f064697798e2a02431f03", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1927, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/ui.context/oauth" - }, - "response": { - "bodySize": 199, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 199, - "text": "{\"_id\":\"ui.context/oauth\",\"cacheEnabled\":true,\"defaultDir\":\"&{idm.install.dir}/ui/oauth/default\",\"enabled\":true,\"extensionDir\":\"&{idm.install.dir}/ui/oauth/extension\",\"urlContextRoot\":\"/oauthReturn\"}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "199" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.876Z", - "time": 353, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 353 - } - }, - { - "_id": "eadbb4ad948866a207831ff04c796efb", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1927, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/ui/configuration" - }, - "response": { - "bodySize": 707, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 707, - "text": "{\"_id\":\"ui/configuration\",\"configuration\":{\"defaultNotificationType\":\"info\",\"forgotUsername\":false,\"lang\":\"en\",\"notificationTypes\":{\"error\":{\"iconPath\":\"images/notifications/error.png\",\"name\":\"common.notification.types.error\"},\"info\":{\"iconPath\":\"images/notifications/info.png\",\"name\":\"common.notification.types.info\"},\"warning\":{\"iconPath\":\"images/notifications/warning.png\",\"name\":\"common.notification.types.warning\"}},\"passwordReset\":true,\"passwordResetLink\":\"\",\"platformSettings\":{\"adminOauthClient\":\"idmAdminClient\",\"adminOauthClientScopes\":\"fr:idm:*\",\"amUrl\":\"/am\",\"loginUrl\":\"\"},\"roles\":{\"internal/role/openidm-admin\":\"ui-admin\",\"internal/role/openidm-authorized\":\"ui-user\"},\"selfRegistration\":true}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "707" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.879Z", - "time": 314, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 314 - } - }, - { - "_id": "dccde179c43e59ffe92f719da481c2cf", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1923, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/ui/dashboard" - }, - "response": { - "bodySize": 1974, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 1974, - "text": "{\"_id\":\"ui/dashboard\",\"adminDashboards\":[{\"isDefault\":true,\"name\":\"Quick Start\",\"widgets\":[{\"cards\":[{\"href\":\"#resource/managed/alpha_user/list/\",\"icon\":\"fa-user\",\"name\":\"Manage Users\"},{\"href\":\"#resource/managed/alpha_role/list/\",\"icon\":\"fa-check-square-o\",\"name\":\"Manage Roles\"},{\"href\":\"#connectors/add/\",\"icon\":\"fa-database\",\"name\":\"Add Connector\"},{\"href\":\"#mapping/add/\",\"icon\":\"fa-map-marker\",\"name\":\"Create Mapping\"},{\"href\":\"#managed/add/\",\"icon\":\"fa-tablet\",\"name\":\"Add Device\"},{\"href\":\"#settings/\",\"icon\":\"fa-user\",\"name\":\"Configure System Preferences\"}],\"size\":\"large\",\"type\":\"quickStart\"}]},{\"isDefault\":false,\"name\":\"System Monitoring\",\"widgets\":[{\"legendRange\":{\"month\":[500,2500,5000],\"week\":[10,30,90,270,810],\"year\":[10000,40000,100000,250000]},\"maxRange\":\"#24423c\",\"minRange\":\"#b0d4cd\",\"size\":\"large\",\"type\":\"audit\"},{\"size\":\"large\",\"type\":\"clusterStatus\"},{\"size\":\"large\",\"type\":\"systemHealthFull\"},{\"barchart\":\"false\",\"size\":\"large\",\"type\":\"lastRecon\"}]},{\"isDefault\":false,\"name\":\"Resource Report\",\"widgets\":[{\"selected\":\"activeUsers\",\"size\":\"x-small\",\"type\":\"counter\"},{\"selected\":\"rolesEnabled\",\"size\":\"x-small\",\"type\":\"counter\"},{\"selected\":\"activeConnectors\",\"size\":\"x-small\",\"type\":\"counter\"},{\"size\":\"large\",\"type\":\"resourceList\"}]},{\"isDefault\":false,\"name\":\"Business Report\",\"widgets\":[{\"graphType\":\"fa-pie-chart\",\"providers\":[\"Username/Password\"],\"size\":\"x-small\",\"type\":\"signIns\",\"widgetTitle\":\"Sign-Ins\"},{\"graphType\":\"fa-bar-chart\",\"size\":\"x-small\",\"type\":\"passwordResets\",\"widgetTitle\":\"Password Resets\"},{\"graphType\":\"fa-line-chart\",\"providers\":[\"Username/Password\"],\"size\":\"x-small\",\"type\":\"newRegistrations\",\"widgetTitle\":\"New Registrations\"},{\"size\":\"x-small\",\"timezone\":{\"hours\":\"07\",\"minutes\":\"00\",\"negative\":true},\"type\":\"socialLogin\"},{\"selected\":\"socialEnabled\",\"size\":\"x-small\",\"type\":\"counter\"},{\"selected\":\"manualRegistrations\",\"size\":\"x-small\",\"type\":\"counter\"}]}],\"dashboard\":{\"widgets\":[{\"size\":\"large\",\"type\":\"Welcome\"}]}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "1974" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.882Z", - "time": 158, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 158 - } - }, - { - "_id": "fb55717b678608c3e9704a46f637ba00", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1921, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/ui/profile" - }, - "response": { - "bodySize": 891, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 891, - "text": "{\"_id\":\"ui/profile\",\"tabs\":[{\"name\":\"personalInfoTab\",\"view\":\"org/forgerock/openidm/ui/user/profile/personalInfo/PersonalInfoTab\"},{\"name\":\"signInAndSecurity\",\"view\":\"org/forgerock/openidm/ui/user/profile/signInAndSecurity/SignInAndSecurityTab\"},{\"name\":\"preference\",\"view\":\"org/forgerock/openidm/ui/user/profile/PreferencesTab\"},{\"name\":\"trustedDevice\",\"view\":\"org/forgerock/openidm/ui/user/profile/TrustedDevicesTab\"},{\"name\":\"oauthApplication\",\"view\":\"org/forgerock/openidm/ui/user/profile/OauthApplicationsTab\"},{\"name\":\"privacyAndConsent\",\"view\":\"org/forgerock/openidm/ui/user/profile/PrivacyAndConsentTab\"},{\"name\":\"sharing\",\"view\":\"org/forgerock/openidm/ui/user/profile/uma/SharingTab\"},{\"name\":\"auditHistory\",\"view\":\"org/forgerock/openidm/ui/user/profile/uma/ActivityTab\"},{\"name\":\"accountControls\",\"view\":\"org/forgerock/openidm/ui/user/profile/accountControls/AccountControlsTab\"}]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "891" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.884Z", - "time": 346, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 346 - } - }, - { - "_id": "2cf6006aa7d3908fe4bd8d43fcbca10d", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1925, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/ui/themeconfig" - }, - "response": { - "bodySize": 402, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 402, - "text": "{\"_id\":\"ui/themeconfig\",\"icon\":\"favicon.ico\",\"path\":\"\",\"settings\":{\"footer\":{\"mailto\":\"info@forgerock.com\"},\"loginLogo\":{\"alt\":\"ForgeRock\",\"height\":\"104px\",\"src\":\"images/login-logo-dark.png\",\"title\":\"ForgeRock\",\"width\":\"210px\"},\"logo\":{\"alt\":\"ForgeRock\",\"src\":\"images/logo-horizontal-white.png\",\"title\":\"ForgeRock\"}},\"stylesheets\":[\"css/bootstrap-3.4.1-custom.css\",\"css/structure.css\",\"css/theme.css\"]}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "402" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.887Z", - "time": 225, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 225 - } - }, - { - "_id": "ea86cf4a798460f6def0fb182087b8de", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1924, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/ui/themerealm" - }, - "response": { - "bodySize": 90138, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 90138, - "text": "{\"_id\":\"ui/themerealm\",\"realm\":{\"/alpha\":[{\"_id\":\"4ded6d91-ceea-400a-ae3f-42209f1b0e06\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"
\\n

Uptime & Performance Benchmarking Made Easy

\\n
\\n\\n\",\"journeyJustifiedContentEnabled\":true,\"journeyLayout\":\"justified-right\",\"journeyTheaterMode\":true,\"linkActiveColor\":\"#007661\",\"linkColor\":\"#009C80\",\"linkedTrees\":[],\"logo\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoAltText\":\"Zardoz Logo\",\"logoEnabled\":true,\"logoHeight\":\"47\",\"logoProfile\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileAltText\":\"Zardaz Logo\",\"logoProfileCollapsed\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileCollapsedAltText\":\"Zardaz Logo\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"40\",\"name\":\"Zardoz\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#009C80\",\"primaryOffColor\":\"#007661\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#009C80\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"}],\"alpha\":[{\"_id\":\"cd6c93e2-52e2-4340-9770-66a588343841\",\"accountFooter\":\"\",\"accountFooterEnabled\":false,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#000000\",\"buttonRounded\":\"0\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\",\"journeyFooterEnabled\":false,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#000000\",\"linkColor\":\"#000000\",\"linkedTrees\":[],\"logo\":\"https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg\",\"logoAltText\":\"Contrast\",\"logoEnabled\":true,\"logoHeight\":\"72\",\"logoProfile\":\"data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A\",\"logoProfileAltText\":\"Contrast\",\"logoProfileCollapsed\":\"data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A\",\"logoProfileCollapsedAltText\":\"\",\"logoProfileCollapsedHeight\":\"22\",\"logoProfileHeight\":\"22\",\"name\":\"Contrast\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#000000\",\"primaryOffColor\":\"#000000\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#000000\",\"profileMenuTextHighlightColor\":\"#455469\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"e47838b5-48c9-4dea-8a84-43f4b4ea8e04\",\"accountCardBackgroundColor\":\"#ffffff\",\"accountCardHeaderColor\":\"#23282e\",\"accountCardInnerBorderColor\":\"#e7eef4\",\"accountCardInputBackgroundColor\":\"#ffffff\",\"accountCardInputBorderColor\":\"#c0c9d5\",\"accountCardInputLabelColor\":\"#5e6d82\",\"accountCardInputSelectColor\":\"#e4f4fd\",\"accountCardInputSelectHoverColor\":\"#f6f8fa\",\"accountCardInputTextColor\":\"#23282e\",\"accountCardOuterBorderColor\":\"#e7eef4\",\"accountCardShadow\":3,\"accountCardTabActiveBorderColor\":\"#109cf1\",\"accountCardTabActiveColor\":\"#e4f4fd\",\"accountCardTextColor\":\"#5e6d82\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountFooterScriptTag\":\"\",\"accountFooterScriptTagEnabled\":false,\"accountNavigationBackgroundColor\":\"#ffffff\",\"accountNavigationTextColor\":\"#455469\",\"accountNavigationToggleBorderColor\":\"#e7eef4\",\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"accountTableRowHoverColor\":\"#f6f8fa\",\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"boldLinks\":false,\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"fontFamily\":\"Open Sans\",\"isDefault\":false,\"journeyA11yAddFallbackErrorHeading\":true,\"journeyCardBackgroundColor\":\"#ffffff\",\"journeyCardBorderRadius\":4,\"journeyCardHeaderBackgroundColor\":\"#ffffff\",\"journeyCardShadow\":3,\"journeyCardTextColor\":\"#5e6d82\",\"journeyCardTitleColor\":\"#23282e\",\"journeyFloatingLabels\":true,\"journeyFocusElement\":\"header\",\"journeyFocusFirstFocusableItemEnabled\":false,\"journeyFooter\":\"\\n\",\"journeyFooterEnabled\":true,\"journeyFooterScriptTag\":\"\",\"journeyFooterScriptTagEnabled\":false,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyHeaderSkipLinkEnabled\":false,\"journeyInputBackgroundColor\":\"#ffffff\",\"journeyInputBorderColor\":\"#c0c9d5\",\"journeyInputLabelColor\":\"#5e6d82\",\"journeyInputSelectColor\":\"#e4f4fd\",\"journeyInputSelectHoverColor\":\"#f6f8fa\",\"journeyInputTextColor\":\"#23282e\",\"journeyJustifiedContent\":\"
\\n

Uptime & Performance Benchmarking Made Easy

\\n
\\n\\n\",\"journeyJustifiedContentEnabled\":true,\"journeyJustifiedContentMobileViewEnabled\":false,\"journeyLayout\":\"justified-right\",\"journeyRememberMeEnabled\":false,\"journeyRememberMeLabel\":\"\",\"journeySignInButtonPosition\":\"flex-column\",\"journeyTheaterMode\":true,\"linkActiveColor\":\"#007661\",\"linkColor\":\"#009C80\",\"linkedTrees\":[],\"logo\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoAltText\":\"Zardoz Logo\",\"logoEnabled\":true,\"logoHeight\":\"47\",\"logoProfile\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileAltText\":\"Zardaz Logo\",\"logoProfileCollapsed\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileCollapsedAltText\":\"Zardaz Logo\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"40\",\"name\":\"Copy of Zardoz\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#009C80\",\"primaryOffColor\":\"#007661\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#009C80\",\"secondaryColor\":\"#69788b\",\"successColor\":\"#2ed47a\",\"switchBackgroundColor\":\"#c0c9d5\",\"textColor\":\"#ffffff\",\"topBarBackgroundColor\":\"#ffffff\",\"topBarBorderColor\":\"#e7eef4\",\"topBarHeaderColor\":\"#23282e\",\"topBarTextColor\":\"#69788b\"},{\"_id\":\"00203891-dde0-4114-b27a-219ae0b43a61\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
\\n \\n \\n \\n \\n \\n
    \\n
  • \\n Link\\n
  • \\n
  • \\n Disabled\\n
  • \\n
\\n
    \\n
  • \\n Link\\n
  • \\n
\\n \\n \\n
\\n\",\"journeyHeaderEnabled\":true,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#C60819\",\"linkColor\":\"#EB0A1E\",\"linkedTrees\":[],\"logo\":\"\",\"logoAltText\":\"\",\"logoEnabled\":true,\"logoHeight\":\"40\",\"logoProfile\":\"https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-full.svg\",\"logoProfileAltText\":\"Highlander\",\"logoProfileCollapsed\":\"https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-icon.svg\",\"logoProfileCollapsedAltText\":\"Highlander\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"28\",\"name\":\"Highlander\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#EB0A1E\",\"primaryOffColor\":\"#C60819\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#EB0A1E\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"63e19668-909f-479e-83d7-be7a01cd8187\",\"accountCardBackgroundColor\":\"#ffffff\",\"accountCardHeaderColor\":\"#23282e\",\"accountCardInnerBorderColor\":\"#e7eef4\",\"accountCardInputBackgroundColor\":\"#ffffff\",\"accountCardInputBorderColor\":\"#c0c9d5\",\"accountCardInputLabelColor\":\"#5e6d82\",\"accountCardInputSelectColor\":\"#e4f4fd\",\"accountCardInputTextColor\":\"#23282e\",\"accountCardOuterBorderColor\":\"#e7eef4\",\"accountCardShadow\":3,\"accountCardTabActiveBorderColor\":\"#109cf1\",\"accountCardTabActiveColor\":\"#e4f4fd\",\"accountCardTextColor\":\"#5e6d82\",\"accountFooter\":\"\",\"accountFooterEnabled\":false,\"accountNavigationBackgroundColor\":\"#ffffff\",\"accountNavigationTextColor\":\"#455469\",\"accountNavigationToggleBorderColor\":\"#e7eef4\",\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":true},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"accountTableRowHoverColor\":\"#f6f8fa\",\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#000000\",\"boldLinks\":false,\"buttonRounded\":\"0\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"fontFamily\":\"Open Sans\",\"isDefault\":false,\"journeyCardBackgroundColor\":\"#ffffff\",\"journeyCardShadow\":3,\"journeyCardTextColor\":\"#5e6d82\",\"journeyCardTitleColor\":\"#23282e\",\"journeyFooter\":\"\",\"journeyFooterEnabled\":false,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyInputBackgroundColor\":\"#ffffff\",\"journeyInputBorderColor\":\"#c0c9d5\",\"journeyInputLabelColor\":\"#5e6d82\",\"journeyInputSelectColor\":\"#e4f4fd\",\"journeyInputTextColor\":\"#23282e\",\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#000000\",\"linkColor\":\"#000000\",\"linkedTrees\":[\"FrodoTest\",\"AA-FrodoTest\"],\"logo\":\"https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg\",\"logoAltText\":\"Contrast\",\"logoEnabled\":false,\"logoHeight\":\"72\",\"logoProfile\":\"data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A\",\"logoProfileAltText\":\"Contrast\",\"logoProfileCollapsed\":\"data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A\",\"logoProfileCollapsedAltText\":\"\",\"logoProfileCollapsedHeight\":\"22\",\"logoProfileHeight\":\"22\",\"name\":\"NoAccess\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#000000\",\"primaryOffColor\":\"#000000\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#000000\",\"profileMenuTextHighlightColor\":\"#455469\",\"secondaryColor\":\"#69788b\",\"switchBackgroundColor\":\"#c0c9d5\",\"textColor\":\"#ffffff\",\"topBarBackgroundColor\":\"#ffffff\",\"topBarBorderColor\":\"#e7eef4\",\"topBarHeaderColor\":\"#23282e\",\"topBarTextColor\":\"#69788b\"},{\"_id\":\"b82755e8-fe9a-4d27-b66b-45e37ae12345\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
\\n \\n \\n \\n \\n \\n
    \\n
  • \\n Link\\n
  • \\n
  • \\n Disabled\\n
  • \\n
\\n
    \\n
  • \\n Link\\n
  • \\n
\\n \\n \\n
\\n\",\"journeyHeaderEnabled\":true,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":true,\"journeyLayout\":\"justified-right\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#49871E\",\"linkColor\":\"#5AA625\",\"linkedTrees\":[],\"logo\":\"\",\"logoAltText\":\"\",\"logoEnabled\":true,\"logoHeight\":\"40\",\"logoProfile\":\"data:image/svg+xml,%0A%3Csvg width='156' height='34' viewBox='0 0 156 34' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445995 0.446289 0.445995 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cpath d='M51.053 25.38L53.186 25.11V8.964L51.161 8.586V6.939H55.076C55.418 6.939 55.796 6.93 56.21 6.912C56.624 6.894 56.939 6.876 57.155 6.858C58.091 6.786 58.865 6.75 59.477 6.75C61.331 6.75 62.816 6.939 63.932 7.317C65.048 7.695 65.858 8.271 66.362 9.045C66.866 9.819 67.118 10.836 67.118 12.096C67.118 13.338 66.785 14.49 66.119 15.552C65.453 16.614 64.49 17.343 63.23 17.739C63.95 18.045 64.589 18.603 65.147 19.413C65.705 20.223 66.299 21.276 66.929 22.572C67.379 23.454 67.721 24.093 67.955 24.489C68.207 24.867 68.45 25.083 68.684 25.137L69.575 25.407V27H64.985C64.697 27 64.391 26.712 64.067 26.136C63.761 25.542 63.356 24.615 62.852 23.355C62.258 21.879 61.745 20.727 61.313 19.899C60.881 19.071 60.422 18.558 59.936 18.36H57.155V25.11L59.639 25.38V27H51.053V25.38ZM59.639 16.713C60.665 16.713 61.466 16.344 62.042 15.606C62.618 14.868 62.906 13.761 62.906 12.285C62.906 10.971 62.618 9.999 62.042 9.369C61.484 8.739 60.512 8.424 59.126 8.424C58.622 8.424 58.19 8.451 57.83 8.505C57.488 8.541 57.263 8.559 57.155 8.559V16.659C57.371 16.695 57.893 16.713 58.721 16.713H59.639ZM70.674 19.521C70.674 17.829 71.007 16.389 71.673 15.201C72.357 14.013 73.266 13.122 74.4 12.528C75.534 11.916 76.767 11.61 78.099 11.61C80.367 11.61 82.113 12.312 83.337 13.716C84.579 15.102 85.2 16.992 85.2 19.386C85.2 21.096 84.858 22.554 84.174 23.76C83.508 24.948 82.608 25.839 81.474 26.433C80.358 27.009 79.125 27.297 77.775 27.297C75.525 27.297 73.779 26.604 72.537 25.218C71.295 23.814 70.674 21.915 70.674 19.521ZM77.991 25.542C80.025 25.542 81.042 23.58 81.042 19.656C81.042 17.604 80.799 16.047 80.313 14.985C79.827 13.905 79.035 13.365 77.937 13.365C75.849 13.365 74.805 15.327 74.805 19.251C74.805 21.303 75.057 22.869 75.561 23.949C76.083 25.011 76.893 25.542 77.991 25.542ZM86.4395 5.454L91.3805 4.86H91.4345L92.1905 5.373V13.338C92.6765 12.852 93.2705 12.447 93.9725 12.123C94.6925 11.781 95.4665 11.61 96.2945 11.61C98.0225 11.61 99.4265 12.222 100.506 13.446C101.604 14.652 102.153 16.506 102.153 19.008C102.153 20.556 101.829 21.96 101.181 23.22C100.533 24.48 99.5975 25.479 98.3735 26.217C97.1675 26.937 95.7635 27.297 94.1615 27.297C92.7395 27.297 91.5065 27.18 90.4625 26.946C89.4185 26.694 88.7525 26.469 88.4645 26.271V7.182L86.4395 6.858V5.454ZM94.8635 13.986C94.3235 13.986 93.8105 14.112 93.3245 14.364C92.8565 14.598 92.4785 14.868 92.1905 15.174V25.029C92.2985 25.227 92.5505 25.389 92.9465 25.515C93.3425 25.641 93.7925 25.704 94.2965 25.704C95.4485 25.704 96.3665 25.173 97.0505 24.111C97.7525 23.031 98.1035 21.438 98.1035 19.332C98.1035 17.514 97.8065 16.173 97.2125 15.309C96.6185 14.427 95.8355 13.986 94.8635 13.986Z' fill='black'/%3E%3Cpath d='M104.183 25.38L106.316 25.11V8.964L104.291 8.586V6.939H108.206C108.548 6.939 108.926 6.93 109.34 6.912C109.754 6.894 110.069 6.876 110.285 6.858C111.221 6.786 111.995 6.75 112.607 6.75C114.461 6.75 115.946 6.939 117.062 7.317C118.178 7.695 118.988 8.271 119.492 9.045C119.996 9.819 120.248 10.836 120.248 12.096C120.248 13.338 119.915 14.49 119.249 15.552C118.583 16.614 117.62 17.343 116.36 17.739C117.08 18.045 117.719 18.603 118.277 19.413C118.835 20.223 119.429 21.276 120.059 22.572C120.509 23.454 120.851 24.093 121.085 24.489C121.337 24.867 121.58 25.083 121.814 25.137L122.705 25.407V27H118.115C117.827 27 117.521 26.712 117.197 26.136C116.891 25.542 116.486 24.615 115.982 23.355C115.388 21.879 114.875 20.727 114.443 19.899C114.011 19.071 113.552 18.558 113.066 18.36H110.285V25.11L112.769 25.38V27H104.183V25.38ZM112.769 16.713C113.795 16.713 114.596 16.344 115.172 15.606C115.748 14.868 116.036 13.761 116.036 12.285C116.036 10.971 115.748 9.999 115.172 9.369C114.614 8.739 113.642 8.424 112.256 8.424C111.752 8.424 111.32 8.451 110.96 8.505C110.618 8.541 110.393 8.559 110.285 8.559V16.659C110.501 16.695 111.023 16.713 111.851 16.713H112.769ZM123.804 19.521C123.804 17.829 124.137 16.389 124.803 15.201C125.487 14.013 126.396 13.122 127.53 12.528C128.664 11.916 129.897 11.61 131.229 11.61C133.497 11.61 135.243 12.312 136.467 13.716C137.709 15.102 138.33 16.992 138.33 19.386C138.33 21.096 137.988 22.554 137.304 23.76C136.638 24.948 135.738 25.839 134.604 26.433C133.488 27.009 132.255 27.297 130.905 27.297C128.655 27.297 126.909 26.604 125.667 25.218C124.425 23.814 123.804 21.915 123.804 19.521ZM131.121 25.542C133.155 25.542 134.172 23.58 134.172 19.656C134.172 17.604 133.929 16.047 133.443 14.985C132.957 13.905 132.165 13.365 131.067 13.365C128.979 13.365 127.935 15.327 127.935 19.251C127.935 21.303 128.187 22.869 128.691 23.949C129.213 25.011 130.023 25.542 131.121 25.542ZM143.187 33.723C142.863 33.723 142.512 33.696 142.134 33.642C141.774 33.588 141.513 33.525 141.351 33.453V30.564C141.477 30.636 141.729 30.708 142.107 30.78C142.485 30.852 142.827 30.888 143.133 30.888C144.033 30.888 144.771 30.591 145.347 29.997C145.941 29.403 146.49 28.404 146.994 27H145.536L140.46 13.905L139.245 13.554V11.988H146.67V13.554L144.699 13.878L147.102 21.357L148.074 24.543L148.911 21.357L151.125 13.878L149.424 13.554V11.988H155.283V13.554L153.96 13.878C152.97 16.902 151.989 19.818 151.017 22.626C150.045 25.434 149.478 27.009 149.316 27.351C148.74 28.863 148.191 30.069 147.669 30.969C147.147 31.869 146.526 32.553 145.806 33.021C145.086 33.489 144.213 33.723 143.187 33.723Z' fill='%236CBE34'/%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\"logoProfileAltText\":\"RobRoy\",\"logoProfileCollapsed\":\"data:image/svg+xml,%0A%3Csvg width='33' height='33' viewBox='0 0 33 33' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445996 0.446289 0.445996 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\"logoProfileCollapsedAltText\":\"RobRoy\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"28\",\"name\":\"Robroy\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#5AA625\",\"primaryOffColor\":\"#49871E\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#5AA625\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"86ce2f64-586d-44fe-8593-b12a85aac68d\",\"accountFooter\":\"\",\"accountFooterEnabled\":false,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#324054\",\"backgroundImage\":\"\",\"bodyText\":\"#23282e\",\"buttonRounded\":5,\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":true,\"journeyFooter\":\"\",\"journeyFooterEnabled\":false,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#0c85cf\",\"linkColor\":\"#109cf1\",\"linkedTrees\":[],\"logo\":\"\",\"logoAltText\":\"\",\"logoHeight\":\"40\",\"logoProfile\":\"\",\"logoProfileAltText\":\"\",\"logoProfileCollapsed\":\"\",\"logoProfileCollapsedAltText\":\"\",\"logoProfileCollapsedHeight\":\"40\",\"logoProfileHeight\":\"40\",\"name\":\"Starter Theme\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#324054\",\"primaryOffColor\":\"#242E3C\",\"profileBackgroundColor\":\"#f6f8fa\",\"profileMenuHighlightColor\":\"#f3f5f8\",\"profileMenuHoverColor\":\"#324054\",\"profileMenuHoverTextColor\":\"#ffffff\",\"profileMenuTextHighlightColor\":\"#455469\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"4ded6d91-ceea-400a-ae3f-42209f1b0e06\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"
\\n

Uptime & Performance Benchmarking Made Easy

\\n
\\n\\n\",\"journeyJustifiedContentEnabled\":true,\"journeyLayout\":\"justified-right\",\"journeyTheaterMode\":true,\"linkActiveColor\":\"#007661\",\"linkColor\":\"#009C80\",\"linkedTrees\":[],\"logo\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoAltText\":\"Zardoz Logo\",\"logoEnabled\":true,\"logoHeight\":\"47\",\"logoProfile\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileAltText\":\"Zardaz Logo\",\"logoProfileCollapsed\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileCollapsedAltText\":\"Zardaz Logo\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"40\",\"name\":\"Zardoz\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#009C80\",\"primaryOffColor\":\"#007661\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#009C80\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"}],\"bravo\":[{\"_id\":\"00203891-dde0-4114-b27a-219ae0b43a61\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
\\n \\n \\n \\n \\n \\n
    \\n
  • \\n Link\\n
  • \\n
  • \\n Disabled\\n
  • \\n
\\n
    \\n
  • \\n Link\\n
  • \\n
\\n \\n \\n
\\n\",\"journeyHeaderEnabled\":true,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#C60819\",\"linkColor\":\"#EB0A1E\",\"linkedTrees\":[],\"logo\":\"\",\"logoAltText\":\"\",\"logoEnabled\":true,\"logoHeight\":\"40\",\"logoProfile\":\"https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-full.svg\",\"logoProfileAltText\":\"Highlander\",\"logoProfileCollapsed\":\"https://cdn.forgerock.com/platform/themes/highlander/logo-highlander-icon.svg\",\"logoProfileCollapsedAltText\":\"Highlander\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"28\",\"name\":\"Highlander\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#EB0A1E\",\"primaryOffColor\":\"#C60819\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#EB0A1E\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"4ded6d91-ceea-400a-ae3f-42209f1b0e06\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"
\\n

Uptime & Performance Benchmarking Made Easy

\\n
\\n\\n\",\"journeyJustifiedContentEnabled\":true,\"journeyLayout\":\"justified-right\",\"journeyTheaterMode\":true,\"linkActiveColor\":\"#007661\",\"linkColor\":\"#009C80\",\"linkedTrees\":[],\"logo\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoAltText\":\"Zardoz Logo\",\"logoEnabled\":true,\"logoHeight\":\"47\",\"logoProfile\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileAltText\":\"Zardaz Logo\",\"logoProfileCollapsed\":\"https://cdn.forgerock.com/platform/themes/zardoz/logo-zardoz.svg\",\"logoProfileCollapsedAltText\":\"Zardaz Logo\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"40\",\"name\":\"Zardoz\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#009C80\",\"primaryOffColor\":\"#007661\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#009C80\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"86ce2f64-586d-44fe-8593-b12a85aac68d\",\"accountFooter\":\"\",\"accountFooterEnabled\":false,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#324054\",\"backgroundImage\":\"\",\"bodyText\":\"#23282e\",\"buttonRounded\":5,\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":true,\"journeyFooter\":\"\",\"journeyFooterEnabled\":false,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#0c85cf\",\"linkColor\":\"#109cf1\",\"linkedTrees\":[],\"logo\":\"\",\"logoAltText\":\"\",\"logoHeight\":\"40\",\"logoProfile\":\"\",\"logoProfileAltText\":\"\",\"logoProfileCollapsed\":\"\",\"logoProfileCollapsedAltText\":\"\",\"logoProfileCollapsedHeight\":\"40\",\"logoProfileHeight\":\"40\",\"name\":\"Starter Theme\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#324054\",\"primaryOffColor\":\"#242E3C\",\"profileBackgroundColor\":\"#f6f8fa\",\"profileMenuHighlightColor\":\"#f3f5f8\",\"profileMenuHoverColor\":\"#324054\",\"profileMenuHoverTextColor\":\"#ffffff\",\"profileMenuTextHighlightColor\":\"#455469\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"b82755e8-fe9a-4d27-b66b-45e37ae12345\",\"accountFooter\":\"\\n\",\"accountFooterEnabled\":true,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#5E6D82\",\"buttonRounded\":\"50\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\\n\",\"journeyFooterEnabled\":true,\"journeyHeader\":\"
\\n \\n \\n \\n \\n \\n
    \\n
  • \\n Link\\n
  • \\n
  • \\n Disabled\\n
  • \\n
\\n
    \\n
  • \\n Link\\n
  • \\n
\\n \\n \\n
\\n\",\"journeyHeaderEnabled\":true,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":true,\"journeyLayout\":\"justified-right\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#49871E\",\"linkColor\":\"#5AA625\",\"linkedTrees\":[],\"logo\":\"\",\"logoAltText\":\"\",\"logoEnabled\":true,\"logoHeight\":\"40\",\"logoProfile\":\"data:image/svg+xml,%0A%3Csvg width='156' height='34' viewBox='0 0 156 34' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445995 0.446289 0.445995 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cpath d='M51.053 25.38L53.186 25.11V8.964L51.161 8.586V6.939H55.076C55.418 6.939 55.796 6.93 56.21 6.912C56.624 6.894 56.939 6.876 57.155 6.858C58.091 6.786 58.865 6.75 59.477 6.75C61.331 6.75 62.816 6.939 63.932 7.317C65.048 7.695 65.858 8.271 66.362 9.045C66.866 9.819 67.118 10.836 67.118 12.096C67.118 13.338 66.785 14.49 66.119 15.552C65.453 16.614 64.49 17.343 63.23 17.739C63.95 18.045 64.589 18.603 65.147 19.413C65.705 20.223 66.299 21.276 66.929 22.572C67.379 23.454 67.721 24.093 67.955 24.489C68.207 24.867 68.45 25.083 68.684 25.137L69.575 25.407V27H64.985C64.697 27 64.391 26.712 64.067 26.136C63.761 25.542 63.356 24.615 62.852 23.355C62.258 21.879 61.745 20.727 61.313 19.899C60.881 19.071 60.422 18.558 59.936 18.36H57.155V25.11L59.639 25.38V27H51.053V25.38ZM59.639 16.713C60.665 16.713 61.466 16.344 62.042 15.606C62.618 14.868 62.906 13.761 62.906 12.285C62.906 10.971 62.618 9.999 62.042 9.369C61.484 8.739 60.512 8.424 59.126 8.424C58.622 8.424 58.19 8.451 57.83 8.505C57.488 8.541 57.263 8.559 57.155 8.559V16.659C57.371 16.695 57.893 16.713 58.721 16.713H59.639ZM70.674 19.521C70.674 17.829 71.007 16.389 71.673 15.201C72.357 14.013 73.266 13.122 74.4 12.528C75.534 11.916 76.767 11.61 78.099 11.61C80.367 11.61 82.113 12.312 83.337 13.716C84.579 15.102 85.2 16.992 85.2 19.386C85.2 21.096 84.858 22.554 84.174 23.76C83.508 24.948 82.608 25.839 81.474 26.433C80.358 27.009 79.125 27.297 77.775 27.297C75.525 27.297 73.779 26.604 72.537 25.218C71.295 23.814 70.674 21.915 70.674 19.521ZM77.991 25.542C80.025 25.542 81.042 23.58 81.042 19.656C81.042 17.604 80.799 16.047 80.313 14.985C79.827 13.905 79.035 13.365 77.937 13.365C75.849 13.365 74.805 15.327 74.805 19.251C74.805 21.303 75.057 22.869 75.561 23.949C76.083 25.011 76.893 25.542 77.991 25.542ZM86.4395 5.454L91.3805 4.86H91.4345L92.1905 5.373V13.338C92.6765 12.852 93.2705 12.447 93.9725 12.123C94.6925 11.781 95.4665 11.61 96.2945 11.61C98.0225 11.61 99.4265 12.222 100.506 13.446C101.604 14.652 102.153 16.506 102.153 19.008C102.153 20.556 101.829 21.96 101.181 23.22C100.533 24.48 99.5975 25.479 98.3735 26.217C97.1675 26.937 95.7635 27.297 94.1615 27.297C92.7395 27.297 91.5065 27.18 90.4625 26.946C89.4185 26.694 88.7525 26.469 88.4645 26.271V7.182L86.4395 6.858V5.454ZM94.8635 13.986C94.3235 13.986 93.8105 14.112 93.3245 14.364C92.8565 14.598 92.4785 14.868 92.1905 15.174V25.029C92.2985 25.227 92.5505 25.389 92.9465 25.515C93.3425 25.641 93.7925 25.704 94.2965 25.704C95.4485 25.704 96.3665 25.173 97.0505 24.111C97.7525 23.031 98.1035 21.438 98.1035 19.332C98.1035 17.514 97.8065 16.173 97.2125 15.309C96.6185 14.427 95.8355 13.986 94.8635 13.986Z' fill='black'/%3E%3Cpath d='M104.183 25.38L106.316 25.11V8.964L104.291 8.586V6.939H108.206C108.548 6.939 108.926 6.93 109.34 6.912C109.754 6.894 110.069 6.876 110.285 6.858C111.221 6.786 111.995 6.75 112.607 6.75C114.461 6.75 115.946 6.939 117.062 7.317C118.178 7.695 118.988 8.271 119.492 9.045C119.996 9.819 120.248 10.836 120.248 12.096C120.248 13.338 119.915 14.49 119.249 15.552C118.583 16.614 117.62 17.343 116.36 17.739C117.08 18.045 117.719 18.603 118.277 19.413C118.835 20.223 119.429 21.276 120.059 22.572C120.509 23.454 120.851 24.093 121.085 24.489C121.337 24.867 121.58 25.083 121.814 25.137L122.705 25.407V27H118.115C117.827 27 117.521 26.712 117.197 26.136C116.891 25.542 116.486 24.615 115.982 23.355C115.388 21.879 114.875 20.727 114.443 19.899C114.011 19.071 113.552 18.558 113.066 18.36H110.285V25.11L112.769 25.38V27H104.183V25.38ZM112.769 16.713C113.795 16.713 114.596 16.344 115.172 15.606C115.748 14.868 116.036 13.761 116.036 12.285C116.036 10.971 115.748 9.999 115.172 9.369C114.614 8.739 113.642 8.424 112.256 8.424C111.752 8.424 111.32 8.451 110.96 8.505C110.618 8.541 110.393 8.559 110.285 8.559V16.659C110.501 16.695 111.023 16.713 111.851 16.713H112.769ZM123.804 19.521C123.804 17.829 124.137 16.389 124.803 15.201C125.487 14.013 126.396 13.122 127.53 12.528C128.664 11.916 129.897 11.61 131.229 11.61C133.497 11.61 135.243 12.312 136.467 13.716C137.709 15.102 138.33 16.992 138.33 19.386C138.33 21.096 137.988 22.554 137.304 23.76C136.638 24.948 135.738 25.839 134.604 26.433C133.488 27.009 132.255 27.297 130.905 27.297C128.655 27.297 126.909 26.604 125.667 25.218C124.425 23.814 123.804 21.915 123.804 19.521ZM131.121 25.542C133.155 25.542 134.172 23.58 134.172 19.656C134.172 17.604 133.929 16.047 133.443 14.985C132.957 13.905 132.165 13.365 131.067 13.365C128.979 13.365 127.935 15.327 127.935 19.251C127.935 21.303 128.187 22.869 128.691 23.949C129.213 25.011 130.023 25.542 131.121 25.542ZM143.187 33.723C142.863 33.723 142.512 33.696 142.134 33.642C141.774 33.588 141.513 33.525 141.351 33.453V30.564C141.477 30.636 141.729 30.708 142.107 30.78C142.485 30.852 142.827 30.888 143.133 30.888C144.033 30.888 144.771 30.591 145.347 29.997C145.941 29.403 146.49 28.404 146.994 27H145.536L140.46 13.905L139.245 13.554V11.988H146.67V13.554L144.699 13.878L147.102 21.357L148.074 24.543L148.911 21.357L151.125 13.878L149.424 13.554V11.988H155.283V13.554L153.96 13.878C152.97 16.902 151.989 19.818 151.017 22.626C150.045 25.434 149.478 27.009 149.316 27.351C148.74 28.863 148.191 30.069 147.669 30.969C147.147 31.869 146.526 32.553 145.806 33.021C145.086 33.489 144.213 33.723 143.187 33.723Z' fill='%236CBE34'/%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\"logoProfileAltText\":\"RobRoy\",\"logoProfileCollapsed\":\"data:image/svg+xml,%0A%3Csvg width='33' height='33' viewBox='0 0 33 33' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M32.5539 32.5538C32.5539 32.5538 17.0796 35.6024 7.23861 25.7614C-2.60242 15.9204 0.446148 0.446137 0.446148 0.446137C0.446148 0.446137 15.9204 -2.60243 25.7614 7.23866C35.6024 17.0797 32.5539 32.5538 32.5539 32.5538Z' fill='%23C3EA21'/%3E%3Cpath d='M32.5537 32.554C32.5537 32.554 17.0795 35.6026 7.23845 25.7615C-2.60257 15.9205 0.445996 0.446289 0.445996 0.446289L32.5537 32.554Z' fill='%238ADB53'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='33' height='33' fill='white' transform='matrix(-1 0 0 1 33 0)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\"logoProfileCollapsedAltText\":\"RobRoy\",\"logoProfileCollapsedHeight\":\"28\",\"logoProfileHeight\":\"28\",\"name\":\"Robroy\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#5AA625\",\"primaryOffColor\":\"#49871E\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#455469\",\"profileMenuTextHighlightColor\":\"#5AA625\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"},{\"_id\":\"cd6c93e2-52e2-4340-9770-66a588343841\",\"accountFooter\":\"\",\"accountFooterEnabled\":false,\"accountPageSections\":{\"accountControls\":{\"enabled\":false},\"accountSecurity\":{\"enabled\":true,\"subsections\":{\"password\":{\"enabled\":true},\"securityQuestions\":{\"enabled\":false},\"twoStepVerification\":{\"enabled\":true},\"username\":{\"enabled\":true}}},\"consent\":{\"enabled\":false},\"oauthApplications\":{\"enabled\":false},\"personalInformation\":{\"enabled\":true},\"preferences\":{\"enabled\":false},\"social\":{\"enabled\":false},\"trustedDevices\":{\"enabled\":true}},\"backgroundColor\":\"#FFFFFF\",\"backgroundImage\":\"\",\"bodyText\":\"#000000\",\"buttonRounded\":\"0\",\"dangerColor\":\"#f7685b\",\"favicon\":\"\",\"isDefault\":false,\"journeyFooter\":\"\",\"journeyFooterEnabled\":false,\"journeyHeader\":\"
Header Content
\",\"journeyHeaderEnabled\":false,\"journeyJustifiedContent\":\"\",\"journeyJustifiedContentEnabled\":false,\"journeyLayout\":\"card\",\"journeyTheaterMode\":false,\"linkActiveColor\":\"#000000\",\"linkColor\":\"#000000\",\"linkedTrees\":[],\"logo\":\"https://cdn.forgerock.com/platform/themes/contrast/logo-contrast.svg\",\"logoAltText\":\"Contrast\",\"logoEnabled\":true,\"logoHeight\":\"72\",\"logoProfile\":\"data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A\",\"logoProfileAltText\":\"Contrast\",\"logoProfileCollapsed\":\"data:image/svg+xml,%0A%3Csvg width='46' height='46' viewBox='0 0 46 46' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24.3477 13.5664H43.9438C43.5192 12.6317 43.0319 11.734 42.4905 10.8711H24.3477V13.5664Z' fill='black'/%3E%3Cpath d='M24.3477 8.17578H40.5261C39.6996 7.2052 38.7974 6.30182 37.8224 5.48047H24.3477V8.17578Z' fill='black'/%3E%3Cpath d='M24.3477 40.5195H37.8224C38.7975 39.6982 39.6996 38.7948 40.5261 37.8242H24.3477V40.5195Z' fill='black'/%3E%3Cpath d='M24.3477 2.78516H33.8482C31.0136 1.27039 27.7313 0.198195 24.3477 0V2.78516Z' fill='black'/%3E%3Cpath d='M24.3477 18.957H45.6208C45.4566 18.0405 45.2557 17.1372 44.9856 16.2617H24.3477V18.957Z' fill='black'/%3E%3Cpath d='M24.3477 21.6523V24.3477H45.9317C45.958 23.8992 46 23.4549 46 23C46 22.5451 45.958 22.1008 45.9317 21.6523H24.3477Z' fill='black'/%3E%3Cpath d='M0 23C0 35.1781 9.64778 45.2964 21.6523 46V0C9.64778 0.703566 0 10.8219 0 23Z' fill='black'/%3E%3Cpath d='M24.3477 46C27.7313 45.8018 31.0136 44.7296 33.8482 43.2148H24.3477V46Z' fill='black'/%3E%3Cpath d='M45.6208 27.043H24.3477V29.7383H44.9857C45.2557 28.8628 45.4566 27.9595 45.6208 27.043V27.043Z' fill='black'/%3E%3Cpath d='M24.3477 35.1289H42.4905C43.0319 34.266 43.5192 33.3683 43.9438 32.4336H24.3477V35.1289Z' fill='black'/%3E%3C/svg%3E%0A\",\"logoProfileCollapsedAltText\":\"\",\"logoProfileCollapsedHeight\":\"22\",\"logoProfileHeight\":\"22\",\"name\":\"Contrast\",\"pageTitle\":\"#23282e\",\"primaryColor\":\"#000000\",\"primaryOffColor\":\"#000000\",\"profileBackgroundColor\":\"#FFFFFF\",\"profileMenuHighlightColor\":\"#FFFFFF\",\"profileMenuHoverColor\":\"#FFFFFF\",\"profileMenuHoverTextColor\":\"#000000\",\"profileMenuTextHighlightColor\":\"#455469\",\"secondaryColor\":\"#69788b\",\"textColor\":\"#ffffff\"}]}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 671, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.890Z", - "time": 337, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 337 - } - }, - { - "_id": "581520f7e198190ef6014d695cb9d295", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1922, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/uilocale/fr" - }, - "response": { - "bodySize": 532, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 532, - "text": "{\"_id\":\"uilocale/fr\",\"admin\":{\"overrides\":{\"AppLogoURI\":\"URI du logo de l’application\",\"EmailAddress\":\"Adresse e-mail\",\"Name\":\"Nom\",\"Owners\":\"Les propriétaires\"},\"sideMenu\":{\"securityQuestions\":\"Questions de sécurité\"}},\"enduser\":{\"overrides\":{\"FirstName\":\"Prénom\",\"LastName\":\"Nom de famille\"},\"pages\":{\"dashboard\":{\"widgets\":{\"welcome\":{\"greeting\":\"Bonjour\"}}}}},\"login\":{\"login\":{\"next\":\"Suivant\"},\"overrides\":{\"Password\":\"Mot de passe\",\"UserName\":\"Nom d'utilisateur\"}},\"shared\":{\"sideMenu\":{\"dashboard\":\"Tableau de bord\"}}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "532" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.893Z", - "time": 255, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 255 - } - }, - { - "_id": "a6ee1b4ce4f39caa572ade7a0a6380bb", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 1920, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/undefined" - }, - "response": { - "bodySize": 935, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 935, - "text": "{\"_id\":\"undefined\",\"mapping\":{\"mapping/managedBravo_user_managedBravo_user0\":{\"_id\":\"mapping/managedBravo_user_managedBravo_user0\",\"consentRequired\":false,\"displayName\":\"managedBravo_user_managedBravo_user0\",\"icon\":null,\"name\":\"managedBravo_user_managedBravo_user0\",\"policies\":[{\"action\":\"ASYNC\",\"situation\":\"ABSENT\"},{\"action\":\"ASYNC\",\"situation\":\"ALL_GONE\"},{\"action\":\"ASYNC\",\"situation\":\"AMBIGUOUS\"},{\"action\":\"ASYNC\",\"situation\":\"CONFIRMED\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND\"},{\"action\":\"ASYNC\",\"situation\":\"FOUND_ALREADY_LINKED\"},{\"action\":\"ASYNC\",\"situation\":\"LINK_ONLY\"},{\"action\":\"ASYNC\",\"situation\":\"MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"SOURCE_MISSING\"},{\"action\":\"ASYNC\",\"situation\":\"TARGET_IGNORED\"},{\"action\":\"ASYNC\",\"situation\":\"UNASSIGNED\"},{\"action\":\"ASYNC\",\"situation\":\"UNQUALIFIED\"}],\"properties\":[],\"source\":\"managed/bravo_user\",\"target\":\"managed/bravo_user\"}}}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:54:58 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "935" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:54:57.896Z", - "time": 335, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 335 - } - }, - { - "_id": "152787f0426755e28780788234be7372", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2105, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - }, - { - "name": "_pageSize", - "value": "1000" - }, - { - "name": "_fields", - "value": "authoritative,connectorId,description,icon,mappingNames,name,ssoEntities,templateName,templateVersion,uiConfig,url" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/alpha_application?_queryFilter=true&_pageSize=1000&_fields=authoritative%2CconnectorId%2Cdescription%2Cicon%2CmappingNames%2Cname%2CssoEntities%2CtemplateName%2CtemplateVersion%2CuiConfig%2Curl" - }, - "response": { - "bodySize": 4672, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 4672, - "text": "{\"result\":[{\"_id\":\"0f357b7e-6c54-4351-a094-43916877d7e5\",\"_rev\":\"00f417da-de18-42cd-b4e4-d8af90fe833c-3073\",\"authoritative\":false,\"connectorId\":\"Azure\",\"description\":\"Azure\",\"icon\":\"\",\"mappingNames\":[\"systemAzureUser_managedAlpha_user\",\"managedAlpha_user_systemAzureUser\",\"systemAzure__group___managedAlpha_assignment\",\"systemAzureDirectoryrole_managedAlpha_assignment\",\"systemAzureServiceplan_managedAlpha_assignment\"],\"name\":\"Azure\",\"templateName\":\"azure.ad\",\"templateVersion\":\"3.3\",\"uiConfig\":{\"objectTypes\":{\"User\":{\"properties\":{\"__PASSWORD__\":{\"displayName\":\"Password\",\"order\":17,\"userSpecific\":true},\"__roles__\":{\"displayName\":\"Roles\",\"nonAccountObject\":\"directoryRole\",\"order\":3,\"userSpecific\":true},\"__servicePlanIds__\":{\"displayName\":\"Service Plan Ids\",\"nonAccountObject\":\"servicePlan\",\"order\":27,\"userSpecific\":true},\"accountEnabled\":{\"displayName\":\"Account Enabled\",\"order\":0,\"userSpecific\":true},\"city\":{\"displayName\":\"City\",\"order\":5,\"userSpecific\":true},\"companyName\":{\"displayName\":\"Company Name\",\"order\":4,\"userSpecific\":true},\"country\":{\"displayName\":\"Country\",\"order\":6,\"userSpecific\":true},\"department\":{\"displayName\":\"Department\",\"order\":7,\"userSpecific\":true},\"displayName\":{\"displayName\":\"Display Name\",\"order\":8,\"userSpecific\":true},\"givenName\":{\"displayName\":\"Given Name\",\"order\":9,\"userSpecific\":true},\"jobTitle\":{\"displayName\":\"Job Title\",\"order\":11,\"userSpecific\":true},\"mail\":{\"displayName\":\"Mail\",\"isDisplay\":true,\"isMail\":true,\"order\":1,\"userSpecific\":true},\"mailNickname\":{\"displayName\":\"Mail Nickname\",\"order\":12,\"userSpecific\":true},\"manager\":{\"displayName\":\"Manager\",\"order\":13,\"userSpecific\":true},\"memberOf\":{\"displayName\":\"Member Of\",\"nonAccountObject\":\"__GROUP__\",\"order\":2,\"userSpecific\":true},\"mobilePhone\":{\"displayName\":\"Mobile Phone\",\"order\":14,\"userSpecific\":true},\"onPremisesImmutableId\":{\"displayName\":\"On Premises Immutable Id\",\"order\":10,\"userSpecific\":true},\"onPremisesSecurityIdentifier\":{\"displayName\":\"On Premises Security Identifier\",\"order\":15,\"userSpecific\":true},\"otherMails\":{\"displayName\":\"Other Mails\",\"order\":16,\"userSpecific\":true},\"postalCode\":{\"displayName\":\"Postal Code\",\"order\":18,\"userSpecific\":true},\"preferredLanguage\":{\"displayName\":\"Preferred Language\",\"order\":19,\"userSpecific\":true},\"proxyAddresses\":{\"displayName\":\"Proxy Addresses\",\"order\":20,\"userSpecific\":true},\"state\":{\"displayName\":\"State\",\"order\":21,\"userSpecific\":true},\"streetAddress\":{\"displayName\":\"Street Address\",\"order\":22,\"userSpecific\":true},\"surname\":{\"displayName\":\"Surname\",\"order\":23,\"userSpecific\":true},\"usageLocation\":{\"displayName\":\"Usage Location\",\"order\":24,\"userSpecific\":true},\"userPrincipalName\":{\"displayName\":\"User Principal Name\",\"isUsername\":true,\"order\":25,\"userSpecific\":true},\"userType\":{\"displayName\":\"User Type\",\"order\":26,\"userSpecific\":true}}},\"__GROUP__\":{\"properties\":{\"__NAME__\":{\"displayName\":\"Name\",\"order\":2,\"userSpecific\":true},\"description\":{\"displayName\":\"Description\",\"order\":4,\"userSpecific\":true},\"displayName\":{\"displayName\":\"Display Name\",\"order\":3,\"userSpecific\":true},\"groupTypes\":{\"displayName\":\"Group Types\",\"order\":10,\"userSpecific\":true},\"id\":{\"displayName\":\"Id\",\"order\":0,\"userSpecific\":true},\"mail\":{\"displayName\":\"Mail\",\"order\":5,\"userSpecific\":true},\"mailEnabled\":{\"displayName\":\"Mail Enabled\",\"order\":6,\"userSpecific\":true},\"onPremisesSecurityIdentifier\":{\"displayName\":\"On Premises Security Identifier\",\"order\":7,\"userSpecific\":true},\"proxyAddresses\":{\"displayName\":\"Proxy Addresses\",\"order\":8,\"userSpecific\":true},\"securityEnabled\":{\"displayName\":\"Security Enabled\",\"order\":9,\"userSpecific\":true},\"type\":{\"displayName\":\"Type\",\"order\":1,\"userSpecific\":true}}},\"directoryRole\":{\"properties\":{\"description\":{\"displayName\":\"description\",\"order\":0,\"userSpecific\":true},\"displayName\":{\"displayName\":\"displayName\",\"order\":1,\"userSpecific\":true}}},\"servicePlan\":{\"properties\":{\"__NAME__\":{\"displayName\":\"__NAME__\",\"order\":5,\"userSpecific\":true},\"appliesTo\":{\"displayName\":\"appliesTo\",\"order\":0,\"userSpecific\":true},\"provisioningStatus\":{\"displayName\":\"provisioningStatus\",\"order\":2,\"userSpecific\":true},\"servicePlanId\":{\"displayName\":\"servicePlanId\",\"order\":1,\"userSpecific\":true},\"servicePlanName\":{\"displayName\":\"servicePlanName\",\"order\":4,\"userSpecific\":true},\"subscriberSkuId\":{\"displayName\":\"subscriberSkuId\",\"order\":3,\"userSpecific\":true}}}}}},{\"_id\":\"e124e6f6-e25a-4180-a6c3-ff8b782a422c\",\"_rev\":\"3c7b6f74-d805-4004-a27e-75f991919de0-6835\",\"authoritative\":true,\"icon\":\"\",\"name\":\"testLDAP\",\"templateName\":\"ldap\",\"templateVersion\":\"2.1\",\"description\":\"desc\"}],\"resultCount\":2,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:01 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "4672" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 617, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:01.939Z", - "time": 56, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 56 - } - }, - { - "_id": "767bd2bd719b8647ef420c0ae2a79bbb", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2105, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "_queryFilter", - "value": "true" - }, - { - "name": "_pageSize", - "value": "1000" - }, - { - "name": "_fields", - "value": "authoritative,connectorId,description,icon,mappingNames,name,ssoEntities,templateName,templateVersion,uiConfig,url" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/bravo_application?_queryFilter=true&_pageSize=1000&_fields=authoritative%2CconnectorId%2Cdescription%2Cicon%2CmappingNames%2Cname%2CssoEntities%2CtemplateName%2CtemplateVersion%2CuiConfig%2Curl" - }, - "response": { - "bodySize": 138, - "content": { - "mimeType": "application/json;charset=utf-8", - "size": 138, - "text": "{\"result\":[],\"resultCount\":0,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":-1}" - }, - "cookies": [], - "headers": [ - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:09 GMT" - }, - { - "name": "cache-control", - "value": "no-store" - }, - { - "name": "content-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "content-security-policy", - "value": "default-src 'none';frame-ancestors 'none';sandbox" - }, - { - "name": "content-type", - "value": "application/json;charset=utf-8" - }, - { - "name": "cross-origin-opener-policy", - "value": "same-origin" - }, - { - "name": "cross-origin-resource-policy", - "value": "same-origin" - }, - { - "name": "expires", - "value": "0" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "name": "x-frame-options", - "value": "DENY" - }, - { - "name": "content-length", - "value": "138" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 664, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:09.434Z", - "time": 56, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 56 - } - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/saml2_3242371462/recording.har b/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/saml2_3242371462/recording.har deleted file mode 100644 index 123ee9058..000000000 --- a/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/saml2_3242371462/recording.har +++ /dev/null @@ -1,304 +0,0 @@ -{ - "log": { - "_recordingName": "config/export/after/saml2", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.6" - }, - "entries": [ - { - "_id": "444377bea4d67dd7f9b5a36682164e51", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2007, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "entityid", - "value": "iSPAzure" - }, - { - "name": "realm", - "value": "/alpha" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/saml2/jsp/exportmetadata.jsp?entityid=iSPAzure&realm=%2Falpha" - }, - "response": { - "bodySize": 6544, - "content": { - "mimeType": "text/xml;charset=utf-8", - "size": 6544, - "text": "\n\n \n \n \n \n PGNlcnRpZmljYXRlPg==\n \n \n \n \n \n \n PGNlcnRpZmljYXRlPg==\n \n \n \n \n \n \n 128\n \n \n \n \n \n \n \n \n urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\n urn:oasis:names:tc:SAML:2.0:nameid-format:transient\n urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\n urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified\n urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName\n urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos\n urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName\n \n \n \n \n\n\n" - }, - "cookies": [ - { - "httpOnly": true, - "name": "JSESSIONID", - "path": "/am", - "secure": true, - "value": "" - } - ], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "_fromType": "array", - "name": "set-cookie", - "value": "JSESSIONID=; Path=/am; Secure; HttpOnly" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "text/xml;charset=utf-8" - }, - { - "name": "content-length", - "value": "6544" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:00 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - } - ], - "headersSize": 613, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:00.283Z", - "time": 46, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 46 - } - }, - { - "_id": "b7579556c0cda3856378c4432b032d4a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 0, - "cookies": [], - "headers": [ - { - "name": "accept", - "value": "application/json, text/plain, */*" - }, - { - "name": "content-type", - "value": "application/json" - }, - { - "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "accept-api-version", - "value": "protocol=2.1,resource=1.0" - }, - { - "name": "authorization", - "value": "Bearer " - }, - { - "name": "accept-encoding", - "value": "gzip, compress, deflate, br" - }, - { - "name": "host", - "value": "openam-frodo-dev.forgeblocks.com" - } - ], - "headersSize": 2033, - "httpVersion": "HTTP/1.1", - "method": "GET", - "queryString": [ - { - "name": "entityid", - "value": "urn:federation:MicrosoftOnline" - }, - { - "name": "realm", - "value": "/alpha" - } - ], - "url": "https://openam-frodo-dev.forgeblocks.com/am/saml2/jsp/exportmetadata.jsp?entityid=urn%3Afederation%3AMicrosoftOnline&realm=%2Falpha" - }, - "response": { - "bodySize": 10896, - "content": { - "mimeType": "text/xml;charset=utf-8", - "size": 10896, - "text": "\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n PGNlcnRpZmljYXRlPg==\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n PGNlcnRpZmljYXRlPg==\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n PGNlcnRpZmljYXRlPg==\n \n \n \n \n urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\n urn:mace:shibboleth:1.0:nameIdentifier\n urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified\n urn:oasis:names:tc:SAML:2.0:nameid-format:transient\n urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\n \n \n \n \n\n\n" - }, - "cookies": [ - { - "httpOnly": true, - "name": "JSESSIONID", - "path": "/am", - "secure": true, - "value": "" - } - ], - "headers": [ - { - "name": "x-frame-options", - "value": "SAMEORIGIN" - }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, - { - "name": "x-content-type-options", - "value": "nosniff" - }, - { - "_fromType": "array", - "name": "set-cookie", - "value": "JSESSIONID=; Path=/am; Secure; HttpOnly" - }, - { - "name": "pragma", - "value": "no-cache" - }, - { - "name": "content-type", - "value": "text/xml;charset=utf-8" - }, - { - "name": "date", - "value": "Wed, 30 Oct 2024 20:55:00 GMT" - }, - { - "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" - }, - { - "name": "strict-transport-security", - "value": "max-age=31536000; includeSubDomains; preload;" - }, - { - "name": "x-robots-tag", - "value": "none" - }, - { - "name": "via", - "value": "1.1 google" - }, - { - "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" - }, - { - "name": "transfer-encoding", - "value": "chunked" - } - ], - "headersSize": 619, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2024-10-30T20:55:00.403Z", - "time": 46, - "timings": { - "blocked": -1, - "connect": -1, - "dns": -1, - "receive": 0, - "send": 0, - "ssl": -1, - "wait": 46 - } - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/test/e2e/mocks/esv_2056898509/secret-describe_2354453525/0_ui_17490658/am_1076162899/recording.har b/test/e2e/mocks/esv_2056898509/secret-describe_2354453525/0_ui_17490658/am_1076162899/recording.har index c7c90e273..60342185f 100644 --- a/test/e2e/mocks/esv_2056898509/secret-describe_2354453525/0_ui_17490658/am_1076162899/recording.har +++ b/test/e2e/mocks/esv_2056898509/secret-describe_2354453525/0_ui_17490658/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/esv_2056898509/secret-list_2616167324/0_lu_3779266835/am_1076162899/recording.har b/test/e2e/mocks/esv_2056898509/secret-list_2616167324/0_lu_3779266835/am_1076162899/recording.har index d3066ce4f..01c991403 100644 --- a/test/e2e/mocks/esv_2056898509/secret-list_2616167324/0_lu_3779266835/am_1076162899/recording.har +++ b/test/e2e/mocks/esv_2056898509/secret-list_2616167324/0_lu_3779266835/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/esv_2056898509/secret-list_2616167324/0_u_2442356415/am_1076162899/recording.har b/test/e2e/mocks/esv_2056898509/secret-list_2616167324/0_u_2442356415/am_1076162899/recording.har index 8a658eed6..319a5509d 100644 --- a/test/e2e/mocks/esv_2056898509/secret-list_2616167324/0_u_2442356415/am_1076162899/recording.har +++ b/test/e2e/mocks/esv_2056898509/secret-list_2616167324/0_u_2442356415/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/esv_2056898509/variable-describe_860631249/0_ui_17490658/am_1076162899/recording.har b/test/e2e/mocks/esv_2056898509/variable-describe_860631249/0_ui_17490658/am_1076162899/recording.har index 0bef9beb7..961c3653b 100644 --- a/test/e2e/mocks/esv_2056898509/variable-describe_860631249/0_ui_17490658/am_1076162899/recording.har +++ b/test/e2e/mocks/esv_2056898509/variable-describe_860631249/0_ui_17490658/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/esv_2056898509/variable-list_2667764544/0_lu_3779266835/am_1076162899/recording.har b/test/e2e/mocks/esv_2056898509/variable-list_2667764544/0_lu_3779266835/am_1076162899/recording.har index e80974a39..585e278f1 100644 --- a/test/e2e/mocks/esv_2056898509/variable-list_2667764544/0_lu_3779266835/am_1076162899/recording.har +++ b/test/e2e/mocks/esv_2056898509/variable-list_2667764544/0_lu_3779266835/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/esv_2056898509/variable-list_2667764544/0_u_2442356415/am_1076162899/recording.har b/test/e2e/mocks/esv_2056898509/variable-list_2667764544/0_u_2442356415/am_1076162899/recording.har index ee5f583fa..ef2825c3c 100644 --- a/test/e2e/mocks/esv_2056898509/variable-list_2667764544/0_u_2442356415/am_1076162899/recording.har +++ b/test/e2e/mocks/esv_2056898509/variable-list_2667764544/0_u_2442356415/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/github_584874290/recording.har b/test/e2e/mocks/github_584874290/recording.har index 638f5d60e..651551baf 100644 --- a/test/e2e/mocks/github_584874290/recording.har +++ b/test/e2e/mocks/github_584874290/recording.har @@ -25,7 +25,7 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.3" + "value": "@rockcarver/frodo-lib/3.3.3" }, { "name": "accept-encoding", @@ -43,18 +43,18 @@ "url": "https://api.github.com/repos/rockcarver/frodo-cli/releases" }, "response": { - "bodySize": 38622, + "bodySize": 39043, "content": { "encoding": "base64", "mimeType": "application/json; charset=utf-8", - "size": 38622, - "text": "[\"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\"]" + "size": 39043, + "text": "[\"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\"]" }, "cookies": [], "headers": [ { "name": "date", - "value": "Thu, 15 Aug 2024 21:33:11 GMT" + "value": "Wed, 17 Dec 2025 20:35:14 GMT" }, { "name": "content-type", @@ -70,7 +70,7 @@ }, { "name": "etag", - "value": "W/\"d3ea457a94a1b2474eb29acbe1146e2229b5fb4dbd176e7da4a352b394607e17\"" + "value": "W/\"5a2db3067893071c11dd0e22990f2deb2c329ec2901480064b1f0600fb841b25\"" }, { "name": "x-github-media-type", @@ -78,7 +78,7 @@ }, { "name": "link", - "value": "; rel=\"next\", ; rel=\"last\"" + "value": "; rel=\"next\", ; rel=\"last\"" }, { "name": "x-github-api-version-selected", @@ -124,17 +124,21 @@ "name": "server", "value": "github.com" }, + { + "name": "accept-ranges", + "value": "bytes" + }, { "name": "x-ratelimit-limit", "value": "60" }, { "name": "x-ratelimit-remaining", - "value": "59" + "value": "56" }, { "name": "x-ratelimit-reset", - "value": "1723761190" + "value": "1766005391" }, { "name": "x-ratelimit-resource", @@ -142,11 +146,7 @@ }, { "name": "x-ratelimit-used", - "value": "1" - }, - { - "name": "accept-ranges", - "value": "bytes" + "value": "4" }, { "name": "transfer-encoding", @@ -154,7 +154,7 @@ }, { "name": "x-github-request-id", - "value": "07F6:29E9BA:17561A4:2CBE2E2:66BE7416" + "value": "F808:30ECF5:17C3F02:683C87C:69431401" } ], "headersSize": 1403, @@ -163,8 +163,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-08-15T21:33:10.525Z", - "time": 687, + "startedDateTime": "2025-12-17T20:35:13.577Z", + "time": 519, "timings": { "blocked": -1, "connect": -1, @@ -172,7 +172,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 687 + "wait": 519 } } ], diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_a_2643687843/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_a_2643687843/am_1076162899/recording.har new file mode 100644 index 000000000..9a20c7ce7 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_a_2643687843/am_1076162899/recording.har @@ -0,0 +1,1453 @@ +{ + "log": { + "_recordingName": "node/delete/0_a/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:22 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:09:22.837Z", + "time": 107, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 107 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:23 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:09:23.083Z", + "time": 113, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 113 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33588, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33588, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"717534451\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:23 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:09:23.266Z", + "time": 79, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 79 + } + }, + { + "_id": "9b56cfca01c3bdedc214e66783d691a3", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1" + }, + "response": { + "bodySize": 86, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 86, + "text": "{\"code\":400,\"reason\":\"Bad Request\",\"message\":\"Cannot delete node type that is in use\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "86" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:23 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-12-18T16:09:23.358Z", + "time": 63, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 63 + } + }, + { + "_id": "447d7d68e3a08f3e97fd636acf4d5878", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1944, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/session-1" + }, + "response": { + "bodySize": 86, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 86, + "text": "{\"code\":400,\"reason\":\"Bad Request\",\"message\":\"Cannot delete node type that is in use\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "86" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:23 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-12-18T16:09:23.427Z", + "time": 61, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 61 + } + }, + { + "_id": "d07321cd9ad553287ac240b4bb69dd1b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/8ab9f1aad4b4460a9c45d15fb148e221-1" + }, + "response": { + "bodySize": 86, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 86, + "text": "{\"code\":400,\"reason\":\"Bad Request\",\"message\":\"Cannot delete node type that is in use\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "86" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:23 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-12-18T16:09:23.495Z", + "time": 57, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 57 + } + }, + { + "_id": "3d93540d2bae1c62fd8066b94a876c41", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/e5ad0110c8ee4dafaae983003cd05d4a-1" + }, + "response": { + "bodySize": 44, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 44, + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "44" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:23 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:09:23.559Z", + "time": 259, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 259 + } + }, + { + "_id": "50ee3e095b2ed7e731c668591b81e115", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c15e2efb3deb4d4ea338c74a6440b69f-1" + }, + "response": { + "bodySize": 86, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 86, + "text": "{\"code\":400,\"reason\":\"Bad Request\",\"message\":\"Cannot delete node type that is in use\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "86" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:23 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-12-18T16:09:23.825Z", + "time": 77, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 77 + } + }, + { + "_id": "533e1309203a3ff8ab0efc797e45502e", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1" + }, + "response": { + "bodySize": 86, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 86, + "text": "{\"code\":400,\"reason\":\"Bad Request\",\"message\":\"Cannot delete node type that is in use\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "86" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:23 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-12-18T16:09:23.910Z", + "time": 59, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 59 + } + }, + { + "_id": "ea4e7c20764efce4c8026f4f737ed7e3", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c6063fb2f5dc42dd9772bedc93898bd8-1" + }, + "response": { + "bodySize": 86, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 86, + "text": "{\"code\":400,\"reason\":\"Bad Request\",\"message\":\"Cannot delete node type that is in use\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "86" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:24 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-12-18T16:09:23.975Z", + "time": 60, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 60 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_a_2643687843/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_a_2643687843/oauth2_393036114/recording.har new file mode 100644 index 000000000..46de154ab --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_a_2643687843/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/delete/0_a/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:23 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:09:22.967Z", + "time": 103, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 103 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_a_2643687843/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_a_2643687843/openidm_3290118515/recording.har new file mode 100644 index 000000000..5bfb53598 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_a_2643687843/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/delete/0_a/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:23 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:09:23.081Z", + "time": 69, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 69 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:23 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a8be11e4-9406-43a4-a190-d0838993a5e9" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:09:23.203Z", + "time": 53, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 53 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_all_1797740195/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_all_1797740195/am_1076162899/recording.har new file mode 100644 index 000000000..793fcc834 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_all_1797740195/am_1076162899/recording.har @@ -0,0 +1,1310 @@ +{ + "log": { + "_recordingName": "node/delete/0_all/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:43 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:09:43.033Z", + "time": 99, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 99 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:43 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:09:43.284Z", + "time": 116, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 116 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 32057, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 32057, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":6,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":6,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:43 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:09:43.470Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, + { + "_id": "9b56cfca01c3bdedc214e66783d691a3", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1" + }, + "response": { + "bodySize": 86, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 86, + "text": "{\"code\":400,\"reason\":\"Bad Request\",\"message\":\"Cannot delete node type that is in use\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "86" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:43 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-12-18T16:09:43.566Z", + "time": 68, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 68 + } + }, + { + "_id": "447d7d68e3a08f3e97fd636acf4d5878", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1944, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/session-1" + }, + "response": { + "bodySize": 86, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 86, + "text": "{\"code\":400,\"reason\":\"Bad Request\",\"message\":\"Cannot delete node type that is in use\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "86" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:43 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-12-18T16:09:43.640Z", + "time": 69, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 69 + } + }, + { + "_id": "d07321cd9ad553287ac240b4bb69dd1b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/8ab9f1aad4b4460a9c45d15fb148e221-1" + }, + "response": { + "bodySize": 86, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 86, + "text": "{\"code\":400,\"reason\":\"Bad Request\",\"message\":\"Cannot delete node type that is in use\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "86" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:43 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-12-18T16:09:43.716Z", + "time": 64, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 64 + } + }, + { + "_id": "50ee3e095b2ed7e731c668591b81e115", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c15e2efb3deb4d4ea338c74a6440b69f-1" + }, + "response": { + "bodySize": 86, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 86, + "text": "{\"code\":400,\"reason\":\"Bad Request\",\"message\":\"Cannot delete node type that is in use\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "86" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:43 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-12-18T16:09:43.787Z", + "time": 67, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 67 + } + }, + { + "_id": "533e1309203a3ff8ab0efc797e45502e", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1" + }, + "response": { + "bodySize": 86, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 86, + "text": "{\"code\":400,\"reason\":\"Bad Request\",\"message\":\"Cannot delete node type that is in use\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "86" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:43 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-12-18T16:09:43.860Z", + "time": 68, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 68 + } + }, + { + "_id": "ea4e7c20764efce4c8026f4f737ed7e3", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c6063fb2f5dc42dd9772bedc93898bd8-1" + }, + "response": { + "bodySize": 86, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 86, + "text": "{\"code\":400,\"reason\":\"Bad Request\",\"message\":\"Cannot delete node type that is in use\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "86" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:43 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-12-18T16:09:43.939Z", + "time": 62, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 62 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_all_1797740195/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_all_1797740195/oauth2_393036114/recording.har new file mode 100644 index 000000000..6bfac858d --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_all_1797740195/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/delete/0_all/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:43 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:09:43.158Z", + "time": 110, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 110 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_all_1797740195/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_all_1797740195/openidm_3290118515/recording.har new file mode 100644 index 000000000..819c42b25 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_all_1797740195/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/delete/0_all/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:43 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:09:43.282Z", + "time": 68, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 68 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:09:43 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e42f424d-2542-4dc0-be2d-b53d6fbee316" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:09:43.406Z", + "time": 55, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 55 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_i_2777908795/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_i_2777908795/am_1076162899/recording.har new file mode 100644 index 000000000..7b508118a --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_i_2777908795/am_1076162899/recording.har @@ -0,0 +1,447 @@ +{ + "log": { + "_recordingName": "node/delete/0_i/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-28cb3014-26d3-40fc-8bcd-2ebae67988cd" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 18:28:15 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-28cb3014-26d3-40fc-8bcd-2ebae67988cd" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T18:28:15.326Z", + "time": 105, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 105 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-28cb3014-26d3-40fc-8bcd-2ebae67988cd" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 18:28:15 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-28cb3014-26d3-40fc-8bcd-2ebae67988cd" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T18:28:15.585Z", + "time": 117, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 117 + } + }, + { + "_id": "3d93540d2bae1c62fd8066b94a876c41", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-28cb3014-26d3-40fc-8bcd-2ebae67988cd" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/e5ad0110c8ee4dafaae983003cd05d4a-1" + }, + "response": { + "bodySize": 44, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 44, + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "44" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 18:28:16 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-28cb3014-26d3-40fc-8bcd-2ebae67988cd" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T18:28:15.775Z", + "time": 460, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 460 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_i_2777908795/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_i_2777908795/oauth2_393036114/recording.har new file mode 100644 index 000000000..7bf5215a8 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_i_2777908795/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/delete/0_i/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-28cb3014-26d3-40fc-8bcd-2ebae67988cd" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 18:28:15 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-28cb3014-26d3-40fc-8bcd-2ebae67988cd" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T18:28:15.448Z", + "time": 123, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 123 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_i_2777908795/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_i_2777908795/openidm_3290118515/recording.har new file mode 100644 index 000000000..55b1e4071 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_i_2777908795/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/delete/0_i/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-28cb3014-26d3-40fc-8bcd-2ebae67988cd" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 18:28:15 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-28cb3014-26d3-40fc-8bcd-2ebae67988cd" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T18:28:15.582Z", + "time": 81, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 81 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-28cb3014-26d3-40fc-8bcd-2ebae67988cd" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 18:28:15 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-28cb3014-26d3-40fc-8bcd-2ebae67988cd" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T18:28:15.708Z", + "time": 58, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 58 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_n_2861796890/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_n_2861796890/am_1076162899/recording.har new file mode 100644 index 000000000..7c7a5eff0 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_n_2861796890/am_1076162899/recording.har @@ -0,0 +1,595 @@ +{ + "log": { + "_recordingName": "node/delete/0_n/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:08:03 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:08:03.499Z", + "time": 100, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 100 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:08:03 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:08:03.731Z", + "time": 112, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 112 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1242245001\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:08:03 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:08:03.917Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, + { + "_id": "3d93540d2bae1c62fd8066b94a876c41", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/e5ad0110c8ee4dafaae983003cd05d4a-1" + }, + "response": { + "bodySize": 44, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 44, + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "44" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:08:04 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:08:04.007Z", + "time": 394, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 394 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_n_2861796890/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_n_2861796890/oauth2_393036114/recording.har new file mode 100644 index 000000000..64e5309d4 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_n_2861796890/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/delete/0_n/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:08:03 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:08:03.617Z", + "time": 100, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 100 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_n_2861796890/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_n_2861796890/openidm_3290118515/recording.har new file mode 100644 index 000000000..52cda5b88 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_n_2861796890/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/delete/0_n/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:08:03 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:08:03.729Z", + "time": 70, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 70 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:08:03 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5b837054-97d3-4212-9e69-4303a5ce6454" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:08:03.849Z", + "time": 56, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 56 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-id_193359214/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-id_193359214/am_1076162899/recording.har new file mode 100644 index 000000000..27de88eb3 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-id_193359214/am_1076162899/recording.har @@ -0,0 +1,447 @@ +{ + "log": { + "_recordingName": "node/delete/0_node-id/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a367852-5cab-4fb3-b726-2a02f6434b4b" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 18:28:43 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a367852-5cab-4fb3-b726-2a02f6434b4b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T18:28:43.702Z", + "time": 98, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 98 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a367852-5cab-4fb3-b726-2a02f6434b4b" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 18:28:44 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a367852-5cab-4fb3-b726-2a02f6434b4b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T18:28:43.952Z", + "time": 115, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 115 + } + }, + { + "_id": "533e1309203a3ff8ab0efc797e45502e", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a367852-5cab-4fb3-b726-2a02f6434b4b" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1969, + "httpVersion": "HTTP/1.1", + "method": "DELETE", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1" + }, + "response": { + "bodySize": 86, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 86, + "text": "{\"code\":400,\"reason\":\"Bad Request\",\"message\":\"Cannot delete node type that is in use\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "86" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 18:28:44 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a367852-5cab-4fb3-b726-2a02f6434b4b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 400, + "statusText": "Bad Request" + }, + "startedDateTime": "2025-12-17T18:28:44.139Z", + "time": 145, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 145 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-id_193359214/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-id_193359214/oauth2_393036114/recording.har new file mode 100644 index 000000000..0b58b51c9 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-id_193359214/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/delete/0_node-id/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a367852-5cab-4fb3-b726-2a02f6434b4b" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 18:28:43 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a367852-5cab-4fb3-b726-2a02f6434b4b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T18:28:43.822Z", + "time": 115, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 115 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-id_193359214/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-id_193359214/openidm_3290118515/recording.har new file mode 100644 index 000000000..6e5458b06 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-id_193359214/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/delete/0_node-id/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a367852-5cab-4fb3-b726-2a02f6434b4b" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 18:28:43 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a367852-5cab-4fb3-b726-2a02f6434b4b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T18:28:43.949Z", + "time": 73, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 73 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a367852-5cab-4fb3-b726-2a02f6434b4b" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 18:28:44 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4a367852-5cab-4fb3-b726-2a02f6434b4b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T18:28:44.073Z", + "time": 55, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 55 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-name_569027048/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-name_569027048/am_1076162899/recording.har new file mode 100644 index 000000000..b61d79646 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-name_569027048/am_1076162899/recording.har @@ -0,0 +1,452 @@ +{ + "log": { + "_recordingName": "node/delete/0_node-name/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-af5328ad-c68d-48a3-80cf-ef9ad3029950" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:08:27 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-af5328ad-c68d-48a3-80cf-ef9ad3029950" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:08:27.551Z", + "time": 109, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 109 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-af5328ad-c68d-48a3-80cf-ef9ad3029950" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:08:27 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-af5328ad-c68d-48a3-80cf-ef9ad3029950" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:08:27.804Z", + "time": 114, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 114 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-af5328ad-c68d-48a3-80cf-ef9ad3029950" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 32057, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 32057, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":6,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":6,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:08:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-af5328ad-c68d-48a3-80cf-ef9ad3029950" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:08:27.989Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-name_569027048/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-name_569027048/oauth2_393036114/recording.har new file mode 100644 index 000000000..24978e50a --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-name_569027048/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/delete/0_node-name/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-af5328ad-c68d-48a3-80cf-ef9ad3029950" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:08:27 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-af5328ad-c68d-48a3-80cf-ef9ad3029950" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:08:27.687Z", + "time": 102, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 102 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-name_569027048/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-name_569027048/openidm_3290118515/recording.har new file mode 100644 index 000000000..9e2b4decb --- /dev/null +++ b/test/e2e/mocks/node_2982235661/delete_1740784714/0_node-name_569027048/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/delete/0_node-name/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-af5328ad-c68d-48a3-80cf-ef9ad3029950" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:08:27 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-af5328ad-c68d-48a3-80cf-ef9ad3029950" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:08:27.801Z", + "time": 67, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 67 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-af5328ad-c68d-48a3-80cf-ef9ad3029950" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:08:27 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-af5328ad-c68d-48a3-80cf-ef9ad3029950" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:08:27.923Z", + "time": 58, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 58 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_i_2777908795/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_i_2777908795/am_1076162899/recording.har new file mode 100644 index 000000000..92198ceb5 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_i_2777908795/am_1076162899/recording.har @@ -0,0 +1,599 @@ +{ + "log": { + "_recordingName": "node/describe/0_i/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:20 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:20.369Z", + "time": 115, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 115 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:20 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:20.622Z", + "time": 125, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 125 + } + }, + { + "_id": "b40be2f5ec8b014b01fc6a2ec9b6bb29", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1966, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1" + }, + "response": { + "bodySize": 531, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 531, + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1974329536\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "531" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:20 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:20.822Z", + "time": 67, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 67 + } + }, + { + "_id": "eab99da0620b98ea3b5c0ec1fdcb9f2e", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1?_action=journeys" + }, + "response": { + "bodySize": 225, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 225, + "text": "{\"/alpha\":{\"PrestonTestJourney\":[\"f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5\",\"8919c0d5-b40f-43df-b8f3-0934ae79920f\"]},\"/bravo\":{\"PrestonTestJourney\":[\"f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5\",\"8919c0d5-b40f-43df-b8f3-0934ae79920f\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "225" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:20 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:20.904Z", + "time": 68, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 68 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_i_2777908795/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_i_2777908795/oauth2_393036114/recording.har new file mode 100644 index 000000000..c716ae9df --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_i_2777908795/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/describe/0_i/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:20 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:20.506Z", + "time": 102, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 102 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_i_2777908795/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_i_2777908795/openidm_3290118515/recording.har new file mode 100644 index 000000000..79aed3934 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_i_2777908795/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/describe/0_i/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:20 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:20.620Z", + "time": 70, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 70 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:20 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a62f9193-adf8-40f8-90fb-cc77a88f9fb7" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:20.754Z", + "time": 58, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 58 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-id_3284435875/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-id_3284435875/am_1076162899/recording.har new file mode 100644 index 000000000..76f3158b1 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-id_3284435875/am_1076162899/recording.har @@ -0,0 +1,599 @@ +{ + "log": { + "_recordingName": "node/describe/0_json_node-id/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:09 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:09.372Z", + "time": 104, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 104 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:09 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:09.605Z", + "time": 109, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 109 + } + }, + { + "_id": "b40be2f5ec8b014b01fc6a2ec9b6bb29", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1966, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1" + }, + "response": { + "bodySize": 531, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 531, + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1974329536\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "531" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:09 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:09.780Z", + "time": 62, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 62 + } + }, + { + "_id": "eab99da0620b98ea3b5c0ec1fdcb9f2e", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1?_action=journeys" + }, + "response": { + "bodySize": 225, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 225, + "text": "{\"/alpha\":{\"PrestonTestJourney\":[\"f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5\",\"8919c0d5-b40f-43df-b8f3-0934ae79920f\"]},\"/bravo\":{\"PrestonTestJourney\":[\"f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5\",\"8919c0d5-b40f-43df-b8f3-0934ae79920f\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "225" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:09 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:09.855Z", + "time": 70, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 70 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-id_3284435875/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-id_3284435875/oauth2_393036114/recording.har new file mode 100644 index 000000000..9875dd120 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-id_3284435875/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/describe/0_json_node-id/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:09 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:09.494Z", + "time": 97, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 97 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-id_3284435875/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-id_3284435875/openidm_3290118515/recording.har new file mode 100644 index 000000000..12b07907f --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-id_3284435875/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/describe/0_json_node-id/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:09 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:09.603Z", + "time": 65, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 65 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:09 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cd3c628-a2df-494d-934d-97c5574898b3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:09.721Z", + "time": 50, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 50 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-name_2085738493/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-name_2085738493/am_1076162899/recording.har new file mode 100644 index 000000000..6e5ea8464 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-name_2085738493/am_1076162899/recording.har @@ -0,0 +1,600 @@ +{ + "log": { + "_recordingName": "node/describe/0_json_node-name/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:25 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:25.716Z", + "time": 97, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 97 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:26 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:25.942Z", + "time": 119, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 119 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1242245001\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:26 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:26.135Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, + { + "_id": "efac194723689175d66e1e6198bce6c4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1?_action=journeys" + }, + "response": { + "bodySize": 386, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 386, + "text": "{\"/bravo\":{\"FrodoTestJourney12\":[\"d8bd62e2-a4e7-4e08-bb28-10570aa31fcf\",\"18edd91b-5e15-49df-b3c3-764114a8ebb3\",\"eaf91b8a-bb71-4037-97ec-cd2e54885668\",\"ee549716-666c-4b9d-baab-defe1a93eb6c\",\"03416cc6-588b-409a-919f-038bb8194c81\",\"0a3d5de0-9426-4a9a-aae0-163eda075d43\",\"f9155861-f7c8-4022-9bed-e4ef5b238824\",\"65c2a8cd-e623-4c5d-b420-e55fc5105f43\",\"1a002d5d-5ad5-4d0e-965f-a0f26278d08d\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "386" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:26 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:26.225Z", + "time": 72, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 72 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-name_2085738493/oauth2_393036114/recording.har similarity index 72% rename from test/e2e/mocks/config_603940551/export_4211608755/after_460225993/oauth2_393036114/recording.har rename to test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-name_2085738493/oauth2_393036114/recording.har index 919e71f76..f34b20650 100644 --- a/test/e2e/mocks/config_603940551/export_4211608755/after_460225993/oauth2_393036114/recording.har +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-name_2085738493/oauth2_393036114/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "config/export/after/oauth2", + "_recordingName": "node/describe/0_json_node-name/oauth2", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -12,7 +12,7 @@ "_order": 0, "cache": {}, "request": { - "bodySize": 1361, + "bodySize": 1329, "cookies": [], "headers": [ { @@ -25,11 +25,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.2.0" + "value": "@rockcarver/frodo-lib/3.3.3" }, { "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" }, { "name": "accept-api-version", @@ -37,7 +37,7 @@ }, { "name": "content-length", - "value": "1361" + "value": "1329" }, { "name": "accept-encoding", @@ -54,17 +54,17 @@ "postData": { "mimeType": "application/x-www-form-urlencoded", "params": [], - "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:proxy-connect:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:iga:* fr:idc:analytics:* fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:cookie-domain:* fr:idc:promotion:*" + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" }, "queryString": [], "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" }, "response": { - "bodySize": 1862, + "bodySize": 1787, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1862, - "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:proxy-connect:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:iga:* fr:idc:analytics:* fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" }, "cookies": [], "headers": [ @@ -72,10 +72,6 @@ "name": "x-frame-options", "value": "SAMEORIGIN" }, - { - "name": "content-security-policy-report-only", - "value": "frame-ancestors 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'" - }, { "name": "x-content-type-options", "value": "nosniff" @@ -94,15 +90,15 @@ }, { "name": "content-length", - "value": "1862" + "value": "1787" }, { "name": "date", - "value": "Wed, 30 Oct 2024 20:54:57 GMT" + "value": "Wed, 17 Dec 2025 23:12:25 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-7d006413-4b1d-42ad-98b7-ce974a802359" + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" }, { "name": "strict-transport-security", @@ -121,14 +117,14 @@ "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 561, + "headersSize": 451, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-10-30T20:54:57.012Z", - "time": 114, + "startedDateTime": "2025-12-17T23:12:25.830Z", + "time": 98, "timings": { "blocked": -1, "connect": -1, @@ -136,7 +132,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 114 + "wait": 98 } } ], diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-name_2085738493/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-name_2085738493/openidm_3290118515/recording.har new file mode 100644 index 000000000..f2178d584 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_json_node-name_2085738493/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/describe/0_json_node-name/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:25 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:25.940Z", + "time": 71, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 71 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:26 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-10f44138-2404-401a-874b-7ec7d7929659" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:26.068Z", + "time": 57, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 57 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_n_2861796890/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_n_2861796890/am_1076162899/recording.har new file mode 100644 index 000000000..25c739c07 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_n_2861796890/am_1076162899/recording.har @@ -0,0 +1,600 @@ +{ + "log": { + "_recordingName": "node/describe/0_n/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:36 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:36.691Z", + "time": 111, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 111 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:36.941Z", + "time": 114, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 114 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1242245001\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:37.123Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, + { + "_id": "efac194723689175d66e1e6198bce6c4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1?_action=journeys" + }, + "response": { + "bodySize": 386, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 386, + "text": "{\"/bravo\":{\"FrodoTestJourney12\":[\"d8bd62e2-a4e7-4e08-bb28-10570aa31fcf\",\"18edd91b-5e15-49df-b3c3-764114a8ebb3\",\"eaf91b8a-bb71-4037-97ec-cd2e54885668\",\"ee549716-666c-4b9d-baab-defe1a93eb6c\",\"03416cc6-588b-409a-919f-038bb8194c81\",\"0a3d5de0-9426-4a9a-aae0-163eda075d43\",\"f9155861-f7c8-4022-9bed-e4ef5b238824\",\"65c2a8cd-e623-4c5d-b420-e55fc5105f43\",\"1a002d5d-5ad5-4d0e-965f-a0f26278d08d\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "386" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:37.216Z", + "time": 70, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 70 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_n_2861796890/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_n_2861796890/oauth2_393036114/recording.har new file mode 100644 index 000000000..167e2eac5 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_n_2861796890/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/describe/0_n/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:36 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:36.822Z", + "time": 106, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 106 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_n_2861796890/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_n_2861796890/openidm_3290118515/recording.har new file mode 100644 index 000000000..3940d7757 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_n_2861796890/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/describe/0_n/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:36 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:36.939Z", + "time": 68, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 68 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:37 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-be75bb66-e1b3-42af-9736-f7f9a3e6a417" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:37.061Z", + "time": 53, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 53 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_node-name_569027048/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_node-name_569027048/am_1076162899/recording.har new file mode 100644 index 000000000..08ff2cefb --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_node-name_569027048/am_1076162899/recording.har @@ -0,0 +1,452 @@ +{ + "log": { + "_recordingName": "node/describe/0_node-name/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d227c5e4-09a5-499e-b450-8db780cf0dab" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:53 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d227c5e4-09a5-499e-b450-8db780cf0dab" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:53.008Z", + "time": 104, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 104 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d227c5e4-09a5-499e-b450-8db780cf0dab" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:53 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d227c5e4-09a5-499e-b450-8db780cf0dab" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:53.243Z", + "time": 112, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 112 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d227c5e4-09a5-499e-b450-8db780cf0dab" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1242245001\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:53 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d227c5e4-09a5-499e-b450-8db780cf0dab" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:53.427Z", + "time": 78, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 78 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_node-name_569027048/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_node-name_569027048/oauth2_393036114/recording.har new file mode 100644 index 000000000..e8c209e4a --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_node-name_569027048/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/describe/0_node-name/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d227c5e4-09a5-499e-b450-8db780cf0dab" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:53 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d227c5e4-09a5-499e-b450-8db780cf0dab" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:53.133Z", + "time": 96, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 96 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/describe_1360419304/0_node-name_569027048/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/describe_1360419304/0_node-name_569027048/openidm_3290118515/recording.har new file mode 100644 index 000000000..6b148b93f --- /dev/null +++ b/test/e2e/mocks/node_2982235661/describe_1360419304/0_node-name_569027048/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/describe/0_node-name/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d227c5e4-09a5-499e-b450-8db780cf0dab" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:53 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d227c5e4-09a5-499e-b450-8db780cf0dab" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:53.241Z", + "time": 67, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 67 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d227c5e4-09a5-499e-b450-8db780cf0dab" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:11:53 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d227c5e4-09a5-499e-b450-8db780cf0dab" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:11:53.361Z", + "time": 57, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 57 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_AND_3915246409/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_AND_3915246409/am_1076162899/recording.har new file mode 100644 index 000000000..d5d2683f0 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_AND_3915246409/am_1076162899/recording.har @@ -0,0 +1,452 @@ +{ + "log": { + "_recordingName": "node/export/0_AND/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5a4c0eb8-d780-473b-af4f-88be13025f85" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:20 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5a4c0eb8-d780-473b-af4f-88be13025f85" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:20.046Z", + "time": 114, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 114 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5a4c0eb8-d780-473b-af4f-88be13025f85" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:20 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5a4c0eb8-d780-473b-af4f-88be13025f85" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:20.292Z", + "time": 115, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 115 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5a4c0eb8-d780-473b-af4f-88be13025f85" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1242245001\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:20 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5a4c0eb8-d780-473b-af4f-88be13025f85" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:20.479Z", + "time": 79, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 79 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_AND_3915246409/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_AND_3915246409/oauth2_393036114/recording.har new file mode 100644 index 000000000..e82de83e4 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_AND_3915246409/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/export/0_AND/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5a4c0eb8-d780-473b-af4f-88be13025f85" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:20 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5a4c0eb8-d780-473b-af4f-88be13025f85" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:20.183Z", + "time": 94, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 94 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_AND_3915246409/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_AND_3915246409/openidm_3290118515/recording.har new file mode 100644 index 000000000..58759ff29 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_AND_3915246409/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/export/0_AND/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5a4c0eb8-d780-473b-af4f-88be13025f85" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:20 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5a4c0eb8-d780-473b-af4f-88be13025f85" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:20.289Z", + "time": 70, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 70 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5a4c0eb8-d780-473b-af4f-88be13025f85" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:20 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5a4c0eb8-d780-473b-af4f-88be13025f85" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:20.413Z", + "time": 52, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 52 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_Nxi_D_3064606086/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_Nxi_D_3064606086/am_1076162899/recording.har new file mode 100644 index 000000000..53024f8fc --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_Nxi_D_3064606086/am_1076162899/recording.har @@ -0,0 +1,451 @@ +{ + "log": { + "_recordingName": "node/export/0_Nxi_D/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e8c57f82-882e-4730-8764-05c6a75eb980" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 15:59:44 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e8c57f82-882e-4730-8764-05c6a75eb980" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T15:59:47.635Z", + "time": 369, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 369 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e8c57f82-882e-4730-8764-05c6a75eb980" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 15:59:44 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e8c57f82-882e-4730-8764-05c6a75eb980" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T15:59:48.156Z", + "time": 118, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 118 + } + }, + { + "_id": "b40be2f5ec8b014b01fc6a2ec9b6bb29", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e8c57f82-882e-4730-8764-05c6a75eb980" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1966, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1" + }, + "response": { + "bodySize": 531, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 531, + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1974329536\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "531" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 15:59:45 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e8c57f82-882e-4730-8764-05c6a75eb980" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T15:59:48.342Z", + "time": 66, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 66 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_Nxi_D_3064606086/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_Nxi_D_3064606086/oauth2_393036114/recording.har new file mode 100644 index 000000000..f3d7bd302 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_Nxi_D_3064606086/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/export/0_Nxi_D/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e8c57f82-882e-4730-8764-05c6a75eb980" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 15:59:44 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e8c57f82-882e-4730-8764-05c6a75eb980" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T15:59:48.023Z", + "time": 117, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 117 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_Nxi_D_3064606086/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_Nxi_D_3064606086/openidm_3290118515/recording.har new file mode 100644 index 000000000..705ee5b42 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_Nxi_D_3064606086/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/export/0_Nxi_D/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e8c57f82-882e-4730-8764-05c6a75eb980" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 15:59:44 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e8c57f82-882e-4730-8764-05c6a75eb980" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T15:59:48.153Z", + "time": 83, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 83 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e8c57f82-882e-4730-8764-05c6a75eb980" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 15:59:44 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e8c57f82-882e-4730-8764-05c6a75eb980" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T15:59:48.280Z", + "time": 52, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 52 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_a_2643687843/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_a_2643687843/am_1076162899/recording.har new file mode 100644 index 000000000..f6f20ea25 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_a_2643687843/am_1076162899/recording.har @@ -0,0 +1,452 @@ +{ + "log": { + "_recordingName": "node/export/0_a/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-33f3c943-808e-46bf-9881-931dc8e6ea21" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:47 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-33f3c943-808e-46bf-9881-931dc8e6ea21" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:47.359Z", + "time": 110, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 110 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-33f3c943-808e-46bf-9881-931dc8e6ea21" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:47 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-33f3c943-808e-46bf-9881-931dc8e6ea21" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:47.585Z", + "time": 111, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 111 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-33f3c943-808e-46bf-9881-931dc8e6ea21" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1242245001\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:47 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-33f3c943-808e-46bf-9881-931dc8e6ea21" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:47.767Z", + "time": 85, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 85 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_a_2643687843/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_a_2643687843/oauth2_393036114/recording.har new file mode 100644 index 000000000..d83574fbe --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_a_2643687843/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/export/0_a/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-33f3c943-808e-46bf-9881-931dc8e6ea21" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:47 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-33f3c943-808e-46bf-9881-931dc8e6ea21" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:47.486Z", + "time": 89, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 89 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_a_2643687843/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_a_2643687843/openidm_3290118515/recording.har new file mode 100644 index 000000000..84f3eda18 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_a_2643687843/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/export/0_a/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-33f3c943-808e-46bf-9881-931dc8e6ea21" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:47 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-33f3c943-808e-46bf-9881-931dc8e6ea21" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:47.583Z", + "time": 63, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 63 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-33f3c943-808e-46bf-9881-931dc8e6ea21" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:47 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-33f3c943-808e-46bf-9881-931dc8e6ea21" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:47.703Z", + "time": 55, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 55 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_all-separate_extract_directory_374884441/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_all-separate_extract_directory_374884441/am_1076162899/recording.har new file mode 100644 index 000000000..abb48aed0 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_all-separate_extract_directory_374884441/am_1076162899/recording.har @@ -0,0 +1,452 @@ +{ + "log": { + "_recordingName": "node/export/0_all-separate_extract_directory/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1512a39c-dd62-40c1-bdf8-c26c78065768" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:36 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1512a39c-dd62-40c1-bdf8-c26c78065768" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:36.412Z", + "time": 107, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 107 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1512a39c-dd62-40c1-bdf8-c26c78065768" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:36 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1512a39c-dd62-40c1-bdf8-c26c78065768" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:36.654Z", + "time": 110, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 110 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1512a39c-dd62-40c1-bdf8-c26c78065768" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1242245001\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:36 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1512a39c-dd62-40c1-bdf8-c26c78065768" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:36.840Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_all-separate_extract_directory_374884441/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_all-separate_extract_directory_374884441/oauth2_393036114/recording.har new file mode 100644 index 000000000..bd5263638 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_all-separate_extract_directory_374884441/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/export/0_all-separate_extract_directory/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1512a39c-dd62-40c1-bdf8-c26c78065768" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:36 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1512a39c-dd62-40c1-bdf8-c26c78065768" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:36.541Z", + "time": 100, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 100 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_all-separate_extract_directory_374884441/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_all-separate_extract_directory_374884441/openidm_3290118515/recording.har new file mode 100644 index 000000000..052bb8c0e --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_all-separate_extract_directory_374884441/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/export/0_all-separate_extract_directory/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1512a39c-dd62-40c1-bdf8-c26c78065768" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:36 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1512a39c-dd62-40c1-bdf8-c26c78065768" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:36.651Z", + "time": 61, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 61 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1512a39c-dd62-40c1-bdf8-c26c78065768" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:36 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1512a39c-dd62-40c1-bdf8-c26c78065768" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:36.773Z", + "time": 57, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 57 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_all_no-metadata_file_directory_74428554/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_all_no-metadata_file_directory_74428554/am_1076162899/recording.har new file mode 100644 index 000000000..c38138c78 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_all_no-metadata_file_directory_74428554/am_1076162899/recording.har @@ -0,0 +1,452 @@ +{ + "log": { + "_recordingName": "node/export/0_all_no-metadata_file_directory/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cadddfa-f404-49ba-8220-4ce0a968f83b" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:03 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cadddfa-f404-49ba-8220-4ce0a968f83b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:03.705Z", + "time": 97, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 97 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cadddfa-f404-49ba-8220-4ce0a968f83b" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:04 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cadddfa-f404-49ba-8220-4ce0a968f83b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:03.929Z", + "time": 118, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 118 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cadddfa-f404-49ba-8220-4ce0a968f83b" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1242245001\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:04 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cadddfa-f404-49ba-8220-4ce0a968f83b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:04.125Z", + "time": 75, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 75 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_all_no-metadata_file_directory_74428554/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_all_no-metadata_file_directory_74428554/oauth2_393036114/recording.har new file mode 100644 index 000000000..2998270b7 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_all_no-metadata_file_directory_74428554/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/export/0_all_no-metadata_file_directory/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cadddfa-f404-49ba-8220-4ce0a968f83b" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:03 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cadddfa-f404-49ba-8220-4ce0a968f83b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:03.823Z", + "time": 92, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 92 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_all_no-metadata_file_directory_74428554/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_all_no-metadata_file_directory_74428554/openidm_3290118515/recording.har new file mode 100644 index 000000000..b7b06595f --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_all_no-metadata_file_directory_74428554/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/export/0_all_no-metadata_file_directory/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cadddfa-f404-49ba-8220-4ce0a968f83b" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:03 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cadddfa-f404-49ba-8220-4ce0a968f83b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:03.927Z", + "time": 64, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 64 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cadddfa-f404-49ba-8220-4ce0a968f83b" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:14:04 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1cadddfa-f404-49ba-8220-4ce0a968f83b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:14:04.054Z", + "time": 59, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 59 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_node-id_193359214/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_node-id_193359214/am_1076162899/recording.har new file mode 100644 index 000000000..b0b438de9 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_node-id_193359214/am_1076162899/recording.har @@ -0,0 +1,451 @@ +{ + "log": { + "_recordingName": "node/export/0_node-id/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-71e27973-7bd2-4511-9e76-d8c807f262f3" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:58 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-71e27973-7bd2-4511-9e76-d8c807f262f3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:58.343Z", + "time": 103, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 103 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-71e27973-7bd2-4511-9e76-d8c807f262f3" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:58 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-71e27973-7bd2-4511-9e76-d8c807f262f3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:58.571Z", + "time": 111, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 111 + } + }, + { + "_id": "b40be2f5ec8b014b01fc6a2ec9b6bb29", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-71e27973-7bd2-4511-9e76-d8c807f262f3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1966, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1" + }, + "response": { + "bodySize": 531, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 531, + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1974329536\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "531" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:58 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-71e27973-7bd2-4511-9e76-d8c807f262f3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:58.757Z", + "time": 69, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 69 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_node-id_193359214/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_node-id_193359214/oauth2_393036114/recording.har new file mode 100644 index 000000000..30386a67d --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_node-id_193359214/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/export/0_node-id/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-71e27973-7bd2-4511-9e76-d8c807f262f3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:58 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-71e27973-7bd2-4511-9e76-d8c807f262f3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:58.465Z", + "time": 91, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 91 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_node-id_193359214/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_node-id_193359214/openidm_3290118515/recording.har new file mode 100644 index 000000000..58eda732b --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_node-id_193359214/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/export/0_node-id/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-71e27973-7bd2-4511-9e76-d8c807f262f3" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:58 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-71e27973-7bd2-4511-9e76-d8c807f262f3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:58.568Z", + "time": 61, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 61 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-71e27973-7bd2-4511-9e76-d8c807f262f3" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:12:58 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-71e27973-7bd2-4511-9e76-d8c807f262f3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:12:58.690Z", + "time": 56, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 56 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_node-name_569027048/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_node-name_569027048/am_1076162899/recording.har new file mode 100644 index 000000000..e2a630151 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_node-name_569027048/am_1076162899/recording.har @@ -0,0 +1,452 @@ +{ + "log": { + "_recordingName": "node/export/0_node-name/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4044d694-530a-4c1e-8ef0-d4764a31ce00" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:31 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4044d694-530a-4c1e-8ef0-d4764a31ce00" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:31.024Z", + "time": 274, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 274 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4044d694-530a-4c1e-8ef0-d4764a31ce00" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:31 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4044d694-530a-4c1e-8ef0-d4764a31ce00" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:31.433Z", + "time": 112, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 112 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4044d694-530a-4c1e-8ef0-d4764a31ce00" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1242245001\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:31 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4044d694-530a-4c1e-8ef0-d4764a31ce00" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:31.619Z", + "time": 83, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 83 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_node-name_569027048/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_node-name_569027048/oauth2_393036114/recording.har new file mode 100644 index 000000000..f19ebadb6 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_node-name_569027048/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/export/0_node-name/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4044d694-530a-4c1e-8ef0-d4764a31ce00" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:31 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4044d694-530a-4c1e-8ef0-d4764a31ce00" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:31.324Z", + "time": 95, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 95 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_node-name_569027048/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_node-name_569027048/openidm_3290118515/recording.har new file mode 100644 index 000000000..951b16357 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_node-name_569027048/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/export/0_node-name/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4044d694-530a-4c1e-8ef0-d4764a31ce00" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:31 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4044d694-530a-4c1e-8ef0-d4764a31ce00" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:31.431Z", + "time": 63, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 63 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4044d694-530a-4c1e-8ef0-d4764a31ce00" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:31 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-4044d694-530a-4c1e-8ef0-d4764a31ce00" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:31.551Z", + "time": 57, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 57 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_xn_D_1672862137/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_xn_D_1672862137/am_1076162899/recording.har new file mode 100644 index 000000000..aef70d474 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_xn_D_1672862137/am_1076162899/recording.har @@ -0,0 +1,452 @@ +{ + "log": { + "_recordingName": "node/export/0_xn_D/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e2868d02-6f8f-48bd-ba6a-126d79d6cc8d" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:14 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e2868d02-6f8f-48bd-ba6a-126d79d6cc8d" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:14.691Z", + "time": 96, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 96 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e2868d02-6f8f-48bd-ba6a-126d79d6cc8d" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:15 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e2868d02-6f8f-48bd-ba6a-126d79d6cc8d" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:14.923Z", + "time": 121, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 121 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e2868d02-6f8f-48bd-ba6a-126d79d6cc8d" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1242245001\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:15 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e2868d02-6f8f-48bd-ba6a-126d79d6cc8d" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:15.131Z", + "time": 86, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 86 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_xn_D_1672862137/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_xn_D_1672862137/oauth2_393036114/recording.har new file mode 100644 index 000000000..ebb7b8ccd --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_xn_D_1672862137/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/export/0_xn_D/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e2868d02-6f8f-48bd-ba6a-126d79d6cc8d" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:14 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e2868d02-6f8f-48bd-ba6a-126d79d6cc8d" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:14.809Z", + "time": 99, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 99 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/export_4211608755/0_xn_D_1672862137/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/export_4211608755/0_xn_D_1672862137/openidm_3290118515/recording.har new file mode 100644 index 000000000..7337440b5 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/export_4211608755/0_xn_D_1672862137/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/export/0_xn_D/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e2868d02-6f8f-48bd-ba6a-126d79d6cc8d" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:14 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e2868d02-6f8f-48bd-ba6a-126d79d6cc8d" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:14.921Z", + "time": 60, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 60 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e2868d02-6f8f-48bd-ba6a-126d79d6cc8d" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 17 Dec 2025 23:13:15 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e2868d02-6f8f-48bd-ba6a-126d79d6cc8d" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-17T23:13:15.051Z", + "time": 59, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 59 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_AD_3050885125/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_AD_3050885125/am_1076162899/recording.har new file mode 100644 index 000000000..7eb25a61c --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_AD_3050885125/am_1076162899/recording.har @@ -0,0 +1,2488 @@ +{ + "log": { + "_recordingName": "node/import/0_AD/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:20 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:20.561Z", + "time": 186, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 186 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:21 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:20.904Z", + "time": 116, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 116 + } + }, + { + "_id": "86a9e2c8d18053aa730f255bcc2c33fd", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1543, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1543" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"displayName\":\"ALU\",\"errorOutcome\":true,\"inputs\":[\"x\",\"y\"],\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"properties\":{\"operator\":{\"defaultValue\":\"ADD\",\"description\":\"The operation to perform.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"DIVIDE\":\"/\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"tags\":[\"math\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c6063fb2f5dc42dd9772bedc93898bd8 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:21 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:21.096Z", + "time": 69, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 69 + } + }, + { + "_id": "63249ddf1b63ccb75799ad46acca8112", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1543, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "1543" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"displayName\":\"ALU\",\"errorOutcome\":true,\"inputs\":[\"x\",\"y\"],\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"properties\":{\"operator\":{\"defaultValue\":\"ADD\",\"description\":\"The operation to perform.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"DIVIDE\":\"/\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"tags\":[\"math\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c6063fb2f5dc42dd9772bedc93898bd8-1" + }, + "response": { + "bodySize": 1562, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1562, + "text": "{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"769006538\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"769006538\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1562" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:21 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:21.172Z", + "time": 166, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 166 + } + }, + { + "_id": "733b0209c304d46ce0fcfa49646e7753", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25131, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "25131" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1955, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"description\":\"Displays custom callback to the page\",\"displayName\":\"Display Callback\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"callback\":{\"description\":\"The callback to display\",\"multivalued\":false,\"options\":{\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\",\"METADATA_CALLBACK\":\"metadataCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\"},\"required\":true,\"title\":\"Callback\",\"type\":\"STRING\"},\"objectSharedProperty\":{\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Shared Property\",\"type\":\"STRING\"},\"objectTransientProperty\":{\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Transient Property\",\"type\":\"STRING\"},\"options\":{\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"multivalued\":false,\"required\":true,\"title\":\"Options\",\"type\":\"OBJECT\"},\"sharedProperty\":{\"description\":\"The shared state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Shared State Property\",\"type\":\"STRING\"},\"transientProperty\":{\"description\":\"The transient state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Transient State Property\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"tags\":[\"callback\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id ef81b1a52c914710b3388caebfe7233a already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:21 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:21.355Z", + "time": 59, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 59 + } + }, + { + "_id": "7b93c39dd7d90434240d968bf4d63f7b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25131, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "25131" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2002, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"description\":\"Displays custom callback to the page\",\"displayName\":\"Display Callback\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"callback\":{\"description\":\"The callback to display\",\"multivalued\":false,\"options\":{\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\",\"METADATA_CALLBACK\":\"metadataCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\"},\"required\":true,\"title\":\"Callback\",\"type\":\"STRING\"},\"objectSharedProperty\":{\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Shared Property\",\"type\":\"STRING\"},\"objectTransientProperty\":{\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Transient Property\",\"type\":\"STRING\"},\"options\":{\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"multivalued\":false,\"required\":true,\"title\":\"Options\",\"type\":\"OBJECT\"},\"sharedProperty\":{\"description\":\"The shared state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Shared State Property\",\"type\":\"STRING\"},\"transientProperty\":{\"description\":\"The transient state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Transient State Property\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"tags\":[\"callback\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1" + }, + "response": { + "bodySize": 25152, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 25152, + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1950533965\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-1950533965\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:21 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 684, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:21.427Z", + "time": 85, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 85 + } + }, + { + "_id": "b04389d8fe8e53386875bda48d89bb63", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1825, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1825" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"displayName\":\"Display State\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"displayFormat\":{\"defaultValue\":\"TABLE\",\"description\":\"The format in which to display the states.\",\"multivalued\":false,\"options\":{\"JSON\":\"Raw JSON\",\"TABLE\":\"HTML Table\"},\"required\":true,\"title\":\"Display Format\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"tags\":[\"debug\",\"testing\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id 8ab9f1aad4b4460a9c45d15fb148e221 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:21 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:21.521Z", + "time": 61, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 61 + } + }, + { + "_id": "9bd0d748bbe5673418b9344904c7982b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1825, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "1825" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"displayName\":\"Display State\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"displayFormat\":{\"defaultValue\":\"TABLE\",\"description\":\"The format in which to display the states.\",\"multivalued\":false,\"options\":{\"JSON\":\"Raw JSON\",\"TABLE\":\"HTML Table\"},\"required\":true,\"title\":\"Display Format\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"tags\":[\"debug\",\"testing\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/8ab9f1aad4b4460a9c45d15fb148e221-1" + }, + "response": { + "bodySize": 1846, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1846, + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1835698014\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-1835698014\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1846" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:21 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 678, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:21.591Z", + "time": 76, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 76 + } + }, + { + "_id": "c2a83b27056ad725cd0956a008e6ac00", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1513, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1513" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"displayName\":\"Generate JWT\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{\"audience\":{\"description\":\"The audience (aud) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Audience\",\"type\":\"STRING\"},\"issuer\":{\"description\":\"The issuer (iss) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Issuer\",\"type\":\"STRING\"},\"signingkey\":{\"defaultValue\":\"esv.signing.key\",\"description\":\"The secret label for the HMAC signing key\",\"multivalued\":false,\"required\":true,\"title\":\"HMAC Signing Key\",\"type\":\"STRING\"},\"validity\":{\"defaultValue\":5,\"description\":\"\",\"multivalued\":false,\"required\":true,\"title\":\"Validity (minutes)\",\"type\":\"NUMBER\"}},\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"tags\":[\"Utilities\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id e5ad0110c8ee4dafaae983003cd05d4a already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:21 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:21.677Z", + "time": 61, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 61 + } + }, + { + "_id": "d0983ab1baa76dcc22e2c7dc24fd4b37", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1513, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "1513" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"displayName\":\"Generate JWT\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{\"audience\":{\"description\":\"The audience (aud) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Audience\",\"type\":\"STRING\"},\"issuer\":{\"description\":\"The issuer (iss) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Issuer\",\"type\":\"STRING\"},\"signingkey\":{\"defaultValue\":\"esv.signing.key\",\"description\":\"The secret label for the HMAC signing key\",\"multivalued\":false,\"required\":true,\"title\":\"HMAC Signing Key\",\"type\":\"STRING\"},\"validity\":{\"defaultValue\":5,\"description\":\"\",\"multivalued\":false,\"required\":true,\"title\":\"Validity (minutes)\",\"type\":\"NUMBER\"}},\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"tags\":[\"Utilities\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/e5ad0110c8ee4dafaae983003cd05d4a-1" + }, + "response": { + "bodySize": 1532, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1532, + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"877923751\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"877923751\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1532" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:21 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:21.747Z", + "time": 81, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 81 + } + }, + { + "_id": "7431bbfd9758c5297f14f6396d9f44c1", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 464, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "464" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1953, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"session-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session AM\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"session\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 94, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 94, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id session already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "94" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:21 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:21.835Z", + "time": 58, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 58 + } + }, + { + "_id": "28549f9482248fbe8d2f6629c88a8d02", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 464, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "464" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1975, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"session-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session AM\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"session\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/session-1" + }, + "response": { + "bodySize": 485, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 485, + "text": "{\"_id\":\"session-1\",\"_rev\":\"-2070168212\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-2070168212\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "485" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:21 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:21.900Z", + "time": 78, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 78 + } + }, + { + "_id": "1175c4fdd69150a1690a688b187f4875", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1953, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c605506774a848f7877b4d17a453bd39 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:22 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:21.985Z", + "time": 62, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 62 + } + }, + { + "_id": "3aa26604cf0e0e1cf748cf742cbfb244", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2000, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1" + }, + "response": { + "bodySize": 530, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 530, + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"149686408\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"149686408\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "530" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:22 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 675, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:22.054Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, + { + "_id": "1dbe58fb6a12a6bd114068309312d187", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 2320, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "2320" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"displayName\":\"Vector ALU\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"properties\":{\"a\":{\"defaultValue\":[1,2,3],\"description\":\"Left vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"A\",\"type\":\"NUMBER\"},\"b\":{\"defaultValue\":[4,5,6],\"description\":\"Right vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"B\",\"type\":\"NUMBER\"},\"operator\":{\"defaultValue\":\"DOT\",\"description\":\"The binary operation to perform on the vectors.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"tags\":[\"math\",\"vector\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c15e2efb3deb4d4ea338c74a6440b69f already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:22 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:22.141Z", + "time": 67, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 67 + } + }, + { + "_id": "3ae2dd3c18e367798dd42f790b216159", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 2320, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "2320" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"displayName\":\"Vector ALU\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"properties\":{\"a\":{\"defaultValue\":[1,2,3],\"description\":\"Left vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"A\",\"type\":\"NUMBER\"},\"b\":{\"defaultValue\":[4,5,6],\"description\":\"Right vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"B\",\"type\":\"NUMBER\"},\"operator\":{\"defaultValue\":\"DOT\",\"description\":\"The binary operation to perform on the vectors.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"tags\":[\"math\",\"vector\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c15e2efb3deb4d4ea338c74a6440b69f-1" + }, + "response": { + "bodySize": 2340, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 2340, + "text": "{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-384336979\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-384336979\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "2340" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:22 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:22.215Z", + "time": 81, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 81 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_AD_3050885125/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_AD_3050885125/oauth2_393036114/recording.har new file mode 100644 index 000000000..87e0c004f --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_AD_3050885125/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/import/0_AD/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:20 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:20.771Z", + "time": 120, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 120 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_AD_3050885125/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_AD_3050885125/openidm_3290118515/recording.har new file mode 100644 index 000000000..1a08f69a2 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_AD_3050885125/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/import/0_AD/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:20 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:20.902Z", + "time": 75, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 75 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:21 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-fb9342a1-75c2-4065-9294-f23e8b36bddc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:21.026Z", + "time": 59, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 59 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_af_D_262722764/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_af_D_262722764/am_1076162899/recording.har new file mode 100644 index 000000000..1aff064be --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_af_D_262722764/am_1076162899/recording.har @@ -0,0 +1,2488 @@ +{ + "log": { + "_recordingName": "node/import/0_af_D/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:06 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:06.860Z", + "time": 98, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 98 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:07 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:07.093Z", + "time": 113, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 113 + } + }, + { + "_id": "b04389d8fe8e53386875bda48d89bb63", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1825, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1825" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"displayName\":\"Display State\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"displayFormat\":{\"defaultValue\":\"TABLE\",\"description\":\"The format in which to display the states.\",\"multivalued\":false,\"options\":{\"JSON\":\"Raw JSON\",\"TABLE\":\"HTML Table\"},\"required\":true,\"title\":\"Display Format\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"tags\":[\"debug\",\"testing\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id 8ab9f1aad4b4460a9c45d15fb148e221 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:07 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:07.277Z", + "time": 68, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 68 + } + }, + { + "_id": "9bd0d748bbe5673418b9344904c7982b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1825, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "1825" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"displayName\":\"Display State\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"displayFormat\":{\"defaultValue\":\"TABLE\",\"description\":\"The format in which to display the states.\",\"multivalued\":false,\"options\":{\"JSON\":\"Raw JSON\",\"TABLE\":\"HTML Table\"},\"required\":true,\"title\":\"Display Format\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"tags\":[\"debug\",\"testing\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/8ab9f1aad4b4460a9c45d15fb148e221-1" + }, + "response": { + "bodySize": 1845, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1845, + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"1446025336\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1446025336\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1845" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:07 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:07.351Z", + "time": 176, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 176 + } + }, + { + "_id": "1dbe58fb6a12a6bd114068309312d187", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 2320, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "2320" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"displayName\":\"Vector ALU\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"properties\":{\"a\":{\"defaultValue\":[1,2,3],\"description\":\"Left vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"A\",\"type\":\"NUMBER\"},\"b\":{\"defaultValue\":[4,5,6],\"description\":\"Right vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"B\",\"type\":\"NUMBER\"},\"operator\":{\"defaultValue\":\"DOT\",\"description\":\"The binary operation to perform on the vectors.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"tags\":[\"math\",\"vector\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c15e2efb3deb4d4ea338c74a6440b69f already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:07 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:07.537Z", + "time": 68, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 68 + } + }, + { + "_id": "3ae2dd3c18e367798dd42f790b216159", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 2320, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "2320" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"displayName\":\"Vector ALU\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"properties\":{\"a\":{\"defaultValue\":[1,2,3],\"description\":\"Left vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"A\",\"type\":\"NUMBER\"},\"b\":{\"defaultValue\":[4,5,6],\"description\":\"Right vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"B\",\"type\":\"NUMBER\"},\"operator\":{\"defaultValue\":\"DOT\",\"description\":\"The binary operation to perform on the vectors.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"tags\":[\"math\",\"vector\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c15e2efb3deb4d4ea338c74a6440b69f-1" + }, + "response": { + "bodySize": 2339, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 2339, + "text": "{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"483997274\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"483997274\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "2339" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:07 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:07.614Z", + "time": 84, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 84 + } + }, + { + "_id": "1175c4fdd69150a1690a688b187f4875", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1953, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c605506774a848f7877b4d17a453bd39 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:07 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:07.707Z", + "time": 62, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 62 + } + }, + { + "_id": "3aa26604cf0e0e1cf748cf742cbfb244", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2000, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1" + }, + "response": { + "bodySize": 531, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 531, + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"-786298663\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-786298663\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "531" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:07 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:07.778Z", + "time": 93, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 93 + } + }, + { + "_id": "86a9e2c8d18053aa730f255bcc2c33fd", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1543, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1543" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"displayName\":\"ALU\",\"errorOutcome\":true,\"inputs\":[\"x\",\"y\"],\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"properties\":{\"operator\":{\"defaultValue\":\"ADD\",\"description\":\"The operation to perform.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"DIVIDE\":\"/\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"tags\":[\"math\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c6063fb2f5dc42dd9772bedc93898bd8 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:07 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:07.880Z", + "time": 70, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 70 + } + }, + { + "_id": "63249ddf1b63ccb75799ad46acca8112", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1543, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "1543" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"displayName\":\"ALU\",\"errorOutcome\":true,\"inputs\":[\"x\",\"y\"],\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"properties\":{\"operator\":{\"defaultValue\":\"ADD\",\"description\":\"The operation to perform.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"DIVIDE\":\"/\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"tags\":[\"math\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c6063fb2f5dc42dd9772bedc93898bd8-1" + }, + "response": { + "bodySize": 1563, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1563, + "text": "{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1518182429\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1518182429\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1563" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:08 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:07.959Z", + "time": 84, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 84 + } + }, + { + "_id": "2ced1ab3cabd8dcb5ae284382d62cc29", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"displayName\":\"Generate JWT\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{\"audience\":{\"description\":\"The audience (aud) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Audience\",\"type\":\"STRING\"},\"issuer\":{\"description\":\"The issuer (iss) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Issuer\",\"type\":\"STRING\"},\"signingkey\":{\"defaultValue\":\"esv.signing.key\",\"description\":\"The secret label for the HMAC signing key\",\"multivalued\":false,\"required\":true,\"title\":\"HMAC Signing Key\",\"type\":\"STRING\"},\"validity\":{\"defaultValue\":5,\"description\":\"\",\"multivalued\":false,\"required\":true,\"title\":\"Validity (minutes)\",\"type\":\"NUMBER\"}},\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"tags\":[\"Utilities\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id e5ad0110c8ee4dafaae983003cd05d4a already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:08 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:08.050Z", + "time": 66, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 66 + } + }, + { + "_id": "f8d684169584906f8d75450fc76dbc94", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "1511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"displayName\":\"Generate JWT\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{\"audience\":{\"description\":\"The audience (aud) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Audience\",\"type\":\"STRING\"},\"issuer\":{\"description\":\"The issuer (iss) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Issuer\",\"type\":\"STRING\"},\"signingkey\":{\"defaultValue\":\"esv.signing.key\",\"description\":\"The secret label for the HMAC signing key\",\"multivalued\":false,\"required\":true,\"title\":\"HMAC Signing Key\",\"type\":\"STRING\"},\"validity\":{\"defaultValue\":5,\"description\":\"\",\"multivalued\":false,\"required\":true,\"title\":\"Validity (minutes)\",\"type\":\"NUMBER\"}},\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"tags\":[\"Utilities\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/e5ad0110c8ee4dafaae983003cd05d4a-1" + }, + "response": { + "bodySize": 1531, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1531, + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-708667534\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-708667534\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1531" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:08 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:08.123Z", + "time": 190, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 190 + } + }, + { + "_id": "733b0209c304d46ce0fcfa49646e7753", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25131, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "25131" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1955, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"description\":\"Displays custom callback to the page\",\"displayName\":\"Display Callback\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"callback\":{\"description\":\"The callback to display\",\"multivalued\":false,\"options\":{\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\",\"METADATA_CALLBACK\":\"metadataCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\"},\"required\":true,\"title\":\"Callback\",\"type\":\"STRING\"},\"objectSharedProperty\":{\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Shared Property\",\"type\":\"STRING\"},\"objectTransientProperty\":{\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Transient Property\",\"type\":\"STRING\"},\"options\":{\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"multivalued\":false,\"required\":true,\"title\":\"Options\",\"type\":\"OBJECT\"},\"sharedProperty\":{\"description\":\"The shared state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Shared State Property\",\"type\":\"STRING\"},\"transientProperty\":{\"description\":\"The transient state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Transient State Property\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"tags\":[\"callback\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id ef81b1a52c914710b3388caebfe7233a already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:08 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:08.325Z", + "time": 66, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 66 + } + }, + { + "_id": "7b93c39dd7d90434240d968bf4d63f7b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25131, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "25131" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2002, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"description\":\"Displays custom callback to the page\",\"displayName\":\"Display Callback\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"callback\":{\"description\":\"The callback to display\",\"multivalued\":false,\"options\":{\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\",\"METADATA_CALLBACK\":\"metadataCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\"},\"required\":true,\"title\":\"Callback\",\"type\":\"STRING\"},\"objectSharedProperty\":{\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Shared Property\",\"type\":\"STRING\"},\"objectTransientProperty\":{\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Transient Property\",\"type\":\"STRING\"},\"options\":{\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"multivalued\":false,\"required\":true,\"title\":\"Options\",\"type\":\"OBJECT\"},\"sharedProperty\":{\"description\":\"The shared state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Shared State Property\",\"type\":\"STRING\"},\"transientProperty\":{\"description\":\"The transient state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Transient State Property\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"tags\":[\"callback\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1" + }, + "response": { + "bodySize": 25152, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 25152, + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1600023635\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-1600023635\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:08 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 684, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:08.402Z", + "time": 91, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 91 + } + }, + { + "_id": "7431bbfd9758c5297f14f6396d9f44c1", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 464, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "464" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1953, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"session-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session AM\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"session\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 94, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 94, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id session already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "94" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:08 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:08.499Z", + "time": 62, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 62 + } + }, + { + "_id": "28549f9482248fbe8d2f6629c88a8d02", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 464, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "464" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1975, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"session-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session AM\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"session\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/session-1" + }, + "response": { + "bodySize": 484, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 484, + "text": "{\"_id\":\"session-1\",\"_rev\":\"-370364378\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-370364378\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "484" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:08 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:08.568Z", + "time": 77, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 77 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_af_D_262722764/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_af_D_262722764/oauth2_393036114/recording.har new file mode 100644 index 000000000..28610d596 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_af_D_262722764/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/import/0_af_D/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:07 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:06.983Z", + "time": 97, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 97 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_af_D_262722764/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_af_D_262722764/openidm_3290118515/recording.har new file mode 100644 index 000000000..f2678d860 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_af_D_262722764/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/import/0_af_D/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:07 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:07.091Z", + "time": 78, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 78 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:07 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a944b53d-7a1f-4efb-a4c8-44404bbb7a94" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:07.212Z", + "time": 56, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 56 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_all-separate_directory_3135850579/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_all-separate_directory_3135850579/am_1076162899/recording.har new file mode 100644 index 000000000..e0c8c0cda --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_all-separate_directory_3135850579/am_1076162899/recording.har @@ -0,0 +1,2488 @@ +{ + "log": { + "_recordingName": "node/import/0_all-separate_directory/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:39 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:39.873Z", + "time": 106, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 106 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:40.131Z", + "time": 115, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 115 + } + }, + { + "_id": "86a9e2c8d18053aa730f255bcc2c33fd", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1543, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1543" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"displayName\":\"ALU\",\"errorOutcome\":true,\"inputs\":[\"x\",\"y\"],\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"properties\":{\"operator\":{\"defaultValue\":\"ADD\",\"description\":\"The operation to perform.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"DIVIDE\":\"/\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"tags\":[\"math\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c6063fb2f5dc42dd9772bedc93898bd8 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:40.324Z", + "time": 68, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 68 + } + }, + { + "_id": "63249ddf1b63ccb75799ad46acca8112", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1543, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "1543" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"displayName\":\"ALU\",\"errorOutcome\":true,\"inputs\":[\"x\",\"y\"],\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"properties\":{\"operator\":{\"defaultValue\":\"ADD\",\"description\":\"The operation to perform.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"DIVIDE\":\"/\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"tags\":[\"math\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c6063fb2f5dc42dd9772bedc93898bd8-1" + }, + "response": { + "bodySize": 1562, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1562, + "text": "{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"855360523\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1562" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:40.400Z", + "time": 397, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 397 + } + }, + { + "_id": "733b0209c304d46ce0fcfa49646e7753", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25131, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "25131" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1955, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"description\":\"Displays custom callback to the page\",\"displayName\":\"Display Callback\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"callback\":{\"description\":\"The callback to display\",\"multivalued\":false,\"options\":{\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\",\"METADATA_CALLBACK\":\"metadataCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\"},\"required\":true,\"title\":\"Callback\",\"type\":\"STRING\"},\"objectSharedProperty\":{\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Shared Property\",\"type\":\"STRING\"},\"objectTransientProperty\":{\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Transient Property\",\"type\":\"STRING\"},\"options\":{\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"multivalued\":false,\"required\":true,\"title\":\"Options\",\"type\":\"OBJECT\"},\"sharedProperty\":{\"description\":\"The shared state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Shared State Property\",\"type\":\"STRING\"},\"transientProperty\":{\"description\":\"The transient state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Transient State Property\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"tags\":[\"callback\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id ef81b1a52c914710b3388caebfe7233a already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:40.810Z", + "time": 58, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 58 + } + }, + { + "_id": "7b93c39dd7d90434240d968bf4d63f7b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25131, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "25131" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2002, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"description\":\"Displays custom callback to the page\",\"displayName\":\"Display Callback\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"callback\":{\"description\":\"The callback to display\",\"multivalued\":false,\"options\":{\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\",\"METADATA_CALLBACK\":\"metadataCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\"},\"required\":true,\"title\":\"Callback\",\"type\":\"STRING\"},\"objectSharedProperty\":{\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Shared Property\",\"type\":\"STRING\"},\"objectTransientProperty\":{\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Transient Property\",\"type\":\"STRING\"},\"options\":{\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"multivalued\":false,\"required\":true,\"title\":\"Options\",\"type\":\"OBJECT\"},\"sharedProperty\":{\"description\":\"The shared state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Shared State Property\",\"type\":\"STRING\"},\"transientProperty\":{\"description\":\"The transient state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Transient State Property\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"tags\":[\"callback\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1" + }, + "response": { + "bodySize": 25151, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 25151, + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1859562163\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 683, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:40.884Z", + "time": 87, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 87 + } + }, + { + "_id": "b04389d8fe8e53386875bda48d89bb63", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1825, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1825" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"displayName\":\"Display State\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"displayFormat\":{\"defaultValue\":\"TABLE\",\"description\":\"The format in which to display the states.\",\"multivalued\":false,\"options\":{\"JSON\":\"Raw JSON\",\"TABLE\":\"HTML Table\"},\"required\":true,\"title\":\"Display Format\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"tags\":[\"debug\",\"testing\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id 8ab9f1aad4b4460a9c45d15fb148e221 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:41 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:40.978Z", + "time": 60, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 60 + } + }, + { + "_id": "9bd0d748bbe5673418b9344904c7982b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1825, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "1825" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"displayName\":\"Display State\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"displayFormat\":{\"defaultValue\":\"TABLE\",\"description\":\"The format in which to display the states.\",\"multivalued\":false,\"options\":{\"JSON\":\"Raw JSON\",\"TABLE\":\"HTML Table\"},\"required\":true,\"title\":\"Display Format\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"tags\":[\"debug\",\"testing\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/8ab9f1aad4b4460a9c45d15fb148e221-1" + }, + "response": { + "bodySize": 1846, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1846, + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-1749152606\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1846" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:41 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 678, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:41.044Z", + "time": 79, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 79 + } + }, + { + "_id": "c2a83b27056ad725cd0956a008e6ac00", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1513, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1513" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"displayName\":\"Generate JWT\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{\"audience\":{\"description\":\"The audience (aud) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Audience\",\"type\":\"STRING\"},\"issuer\":{\"description\":\"The issuer (iss) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Issuer\",\"type\":\"STRING\"},\"signingkey\":{\"defaultValue\":\"esv.signing.key\",\"description\":\"The secret label for the HMAC signing key\",\"multivalued\":false,\"required\":true,\"title\":\"HMAC Signing Key\",\"type\":\"STRING\"},\"validity\":{\"defaultValue\":5,\"description\":\"\",\"multivalued\":false,\"required\":true,\"title\":\"Validity (minutes)\",\"type\":\"NUMBER\"}},\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"tags\":[\"Utilities\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id e5ad0110c8ee4dafaae983003cd05d4a already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:41 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:41.130Z", + "time": 68, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 68 + } + }, + { + "_id": "d0983ab1baa76dcc22e2c7dc24fd4b37", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1513, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "1513" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"displayName\":\"Generate JWT\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{\"audience\":{\"description\":\"The audience (aud) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Audience\",\"type\":\"STRING\"},\"issuer\":{\"description\":\"The issuer (iss) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Issuer\",\"type\":\"STRING\"},\"signingkey\":{\"defaultValue\":\"esv.signing.key\",\"description\":\"The secret label for the HMAC signing key\",\"multivalued\":false,\"required\":true,\"title\":\"HMAC Signing Key\",\"type\":\"STRING\"},\"validity\":{\"defaultValue\":5,\"description\":\"\",\"multivalued\":false,\"required\":true,\"title\":\"Validity (minutes)\",\"type\":\"NUMBER\"}},\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"tags\":[\"Utilities\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/e5ad0110c8ee4dafaae983003cd05d4a-1" + }, + "response": { + "bodySize": 1534, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1534, + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-2070743967\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1534" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:41 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 678, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:41.206Z", + "time": 77, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 77 + } + }, + { + "_id": "7431bbfd9758c5297f14f6396d9f44c1", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 464, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "464" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1953, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"session-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session AM\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"session\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 94, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 94, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id session already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "94" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:41 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:41.290Z", + "time": 64, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 64 + } + }, + { + "_id": "28549f9482248fbe8d2f6629c88a8d02", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 464, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "464" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1975, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"session-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session AM\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"session\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/session-1" + }, + "response": { + "bodySize": 483, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 483, + "text": "{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"705045404\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "483" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:41 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 675, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:41.361Z", + "time": 88, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 88 + } + }, + { + "_id": "1175c4fdd69150a1690a688b187f4875", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1953, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c605506774a848f7877b4d17a453bd39 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:41 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:41.456Z", + "time": 63, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 63 + } + }, + { + "_id": "3aa26604cf0e0e1cf748cf742cbfb244", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2000, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1" + }, + "response": { + "bodySize": 530, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 530, + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"309311416\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "530" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:41 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 675, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:41.527Z", + "time": 82, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 82 + } + }, + { + "_id": "1dbe58fb6a12a6bd114068309312d187", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 2320, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "2320" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"displayName\":\"Vector ALU\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"properties\":{\"a\":{\"defaultValue\":[1,2,3],\"description\":\"Left vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"A\",\"type\":\"NUMBER\"},\"b\":{\"defaultValue\":[4,5,6],\"description\":\"Right vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"B\",\"type\":\"NUMBER\"},\"operator\":{\"defaultValue\":\"DOT\",\"description\":\"The binary operation to perform on the vectors.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"tags\":[\"math\",\"vector\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c15e2efb3deb4d4ea338c74a6440b69f already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:41 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T17:37:41.618Z", + "time": 60, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 60 + } + }, + { + "_id": "3ae2dd3c18e367798dd42f790b216159", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 2320, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "2320" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"displayName\":\"Vector ALU\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"properties\":{\"a\":{\"defaultValue\":[1,2,3],\"description\":\"Left vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"A\",\"type\":\"NUMBER\"},\"b\":{\"defaultValue\":[4,5,6],\"description\":\"Right vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"B\",\"type\":\"NUMBER\"},\"operator\":{\"defaultValue\":\"DOT\",\"description\":\"The binary operation to perform on the vectors.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"tags\":[\"math\",\"vector\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c15e2efb3deb4d4ea338c74a6440b69f-1" + }, + "response": { + "bodySize": 2339, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 2339, + "text": "{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"957146401\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "2339" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:41 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:41.685Z", + "time": 78, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 78 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_all-separate_directory_3135850579/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_all-separate_directory_3135850579/oauth2_393036114/recording.har new file mode 100644 index 000000000..069390336 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_all-separate_directory_3135850579/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/import/0_all-separate_directory/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:40.004Z", + "time": 111, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 111 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_all-separate_directory_3135850579/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_all-separate_directory_3135850579/openidm_3290118515/recording.har new file mode 100644 index 000000000..967bbb17c --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_all-separate_directory_3135850579/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/import/0_all-separate_directory/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:40 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:40.129Z", + "time": 63, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 63 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:37:40 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-208a3d1c-4353-414d-847e-536832ce96e3" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:37:40.254Z", + "time": 56, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 56 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_all_file_3124693826/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_all_file_3124693826/am_1076162899/recording.har new file mode 100644 index 000000000..0b7cf512c --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_all_file_3124693826/am_1076162899/recording.har @@ -0,0 +1,2488 @@ +{ + "log": { + "_recordingName": "node/import/0_all_file/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:28.650Z", + "time": 154, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 154 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:28.949Z", + "time": 118, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 118 + } + }, + { + "_id": "b04389d8fe8e53386875bda48d89bb63", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1825, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1825" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"displayName\":\"Display State\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"displayFormat\":{\"defaultValue\":\"TABLE\",\"description\":\"The format in which to display the states.\",\"multivalued\":false,\"options\":{\"JSON\":\"Raw JSON\",\"TABLE\":\"HTML Table\"},\"required\":true,\"title\":\"Display Format\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"tags\":[\"debug\",\"testing\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id 8ab9f1aad4b4460a9c45d15fb148e221 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:29.141Z", + "time": 67, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 67 + } + }, + { + "_id": "9bd0d748bbe5673418b9344904c7982b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1825, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "1825" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"displayName\":\"Display State\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"displayFormat\":{\"defaultValue\":\"TABLE\",\"description\":\"The format in which to display the states.\",\"multivalued\":false,\"options\":{\"JSON\":\"Raw JSON\",\"TABLE\":\"HTML Table\"},\"required\":true,\"title\":\"Display Format\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"tags\":[\"debug\",\"testing\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/8ab9f1aad4b4460a9c45d15fb148e221-1" + }, + "response": { + "bodySize": 1845, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1845, + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"1253294564\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1253294564\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1845" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:29.213Z", + "time": 147, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 147 + } + }, + { + "_id": "1dbe58fb6a12a6bd114068309312d187", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 2320, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "2320" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"displayName\":\"Vector ALU\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"properties\":{\"a\":{\"defaultValue\":[1,2,3],\"description\":\"Left vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"A\",\"type\":\"NUMBER\"},\"b\":{\"defaultValue\":[4,5,6],\"description\":\"Right vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"B\",\"type\":\"NUMBER\"},\"operator\":{\"defaultValue\":\"DOT\",\"description\":\"The binary operation to perform on the vectors.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"tags\":[\"math\",\"vector\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c15e2efb3deb4d4ea338c74a6440b69f already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:29.370Z", + "time": 60, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 60 + } + }, + { + "_id": "3ae2dd3c18e367798dd42f790b216159", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 2320, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "2320" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"displayName\":\"Vector ALU\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"properties\":{\"a\":{\"defaultValue\":[1,2,3],\"description\":\"Left vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"A\",\"type\":\"NUMBER\"},\"b\":{\"defaultValue\":[4,5,6],\"description\":\"Right vector operand\",\"multivalued\":true,\"required\":true,\"title\":\"B\",\"type\":\"NUMBER\"},\"operator\":{\"defaultValue\":\"DOT\",\"description\":\"The binary operation to perform on the vectors.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"tags\":[\"math\",\"vector\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c15e2efb3deb4d4ea338c74a6440b69f-1" + }, + "response": { + "bodySize": 2340, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 2340, + "text": "{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"1113564678\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1113564678\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "2340" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:29.440Z", + "time": 85, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 85 + } + }, + { + "_id": "1175c4fdd69150a1690a688b187f4875", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1953, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c605506774a848f7877b4d17a453bd39 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:29.535Z", + "time": 60, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 60 + } + }, + { + "_id": "3aa26604cf0e0e1cf748cf742cbfb244", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2000, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1" + }, + "response": { + "bodySize": 532, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 532, + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"-1941250080\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-1941250080\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "532" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:29.604Z", + "time": 75, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 75 + } + }, + { + "_id": "86a9e2c8d18053aa730f255bcc2c33fd", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1543, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1543" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"displayName\":\"ALU\",\"errorOutcome\":true,\"inputs\":[\"x\",\"y\"],\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"properties\":{\"operator\":{\"defaultValue\":\"ADD\",\"description\":\"The operation to perform.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"DIVIDE\":\"/\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"tags\":[\"math\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c6063fb2f5dc42dd9772bedc93898bd8 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:29.686Z", + "time": 65, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 65 + } + }, + { + "_id": "63249ddf1b63ccb75799ad46acca8112", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1543, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "1543" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"displayName\":\"ALU\",\"errorOutcome\":true,\"inputs\":[\"x\",\"y\"],\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"properties\":{\"operator\":{\"defaultValue\":\"ADD\",\"description\":\"The operation to perform.\",\"multivalued\":false,\"options\":{\"ADD\":\"+\",\"DIVIDE\":\"/\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\"},\"required\":true,\"title\":\"Operator\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"tags\":[\"math\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c6063fb2f5dc42dd9772bedc93898bd8-1" + }, + "response": { + "bodySize": 1562, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1562, + "text": "{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"594973911\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"594973911\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1562" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:29.760Z", + "time": 78, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 78 + } + }, + { + "_id": "2ced1ab3cabd8dcb5ae284382d62cc29", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"displayName\":\"Generate JWT\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{\"audience\":{\"description\":\"The audience (aud) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Audience\",\"type\":\"STRING\"},\"issuer\":{\"description\":\"The issuer (iss) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Issuer\",\"type\":\"STRING\"},\"signingkey\":{\"defaultValue\":\"esv.signing.key\",\"description\":\"The secret label for the HMAC signing key\",\"multivalued\":false,\"required\":true,\"title\":\"HMAC Signing Key\",\"type\":\"STRING\"},\"validity\":{\"defaultValue\":5,\"description\":\"\",\"multivalued\":false,\"required\":true,\"title\":\"Validity (minutes)\",\"type\":\"NUMBER\"}},\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"tags\":[\"Utilities\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id e5ad0110c8ee4dafaae983003cd05d4a already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:29.846Z", + "time": 63, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 63 + } + }, + { + "_id": "f8d684169584906f8d75450fc76dbc94", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "1511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"displayName\":\"Generate JWT\",\"errorOutcome\":true,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{\"audience\":{\"description\":\"The audience (aud) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Audience\",\"type\":\"STRING\"},\"issuer\":{\"description\":\"The issuer (iss) claim\",\"multivalued\":false,\"required\":true,\"title\":\"Issuer\",\"type\":\"STRING\"},\"signingkey\":{\"defaultValue\":\"esv.signing.key\",\"description\":\"The secret label for the HMAC signing key\",\"multivalued\":false,\"required\":true,\"title\":\"HMAC Signing Key\",\"type\":\"STRING\"},\"validity\":{\"defaultValue\":5,\"description\":\"\",\"multivalued\":false,\"required\":true,\"title\":\"Validity (minutes)\",\"type\":\"NUMBER\"}},\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"tags\":[\"Utilities\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/e5ad0110c8ee4dafaae983003cd05d4a-1" + }, + "response": { + "bodySize": 1531, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1531, + "text": "{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1554001423\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1554001423\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1531" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:29 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:29.916Z", + "time": 77, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 77 + } + }, + { + "_id": "733b0209c304d46ce0fcfa49646e7753", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25131, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "25131" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1955, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"description\":\"Displays custom callback to the page\",\"displayName\":\"Display Callback\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"callback\":{\"description\":\"The callback to display\",\"multivalued\":false,\"options\":{\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\",\"METADATA_CALLBACK\":\"metadataCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\"},\"required\":true,\"title\":\"Callback\",\"type\":\"STRING\"},\"objectSharedProperty\":{\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Shared Property\",\"type\":\"STRING\"},\"objectTransientProperty\":{\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Transient Property\",\"type\":\"STRING\"},\"options\":{\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"multivalued\":false,\"required\":true,\"title\":\"Options\",\"type\":\"OBJECT\"},\"sharedProperty\":{\"description\":\"The shared state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Shared State Property\",\"type\":\"STRING\"},\"transientProperty\":{\"description\":\"The transient state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Transient State Property\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"tags\":[\"callback\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id ef81b1a52c914710b3388caebfe7233a already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:30 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:30.007Z", + "time": 103, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 103 + } + }, + { + "_id": "7b93c39dd7d90434240d968bf4d63f7b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25131, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "25131" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2002, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"description\":\"Displays custom callback to the page\",\"displayName\":\"Display Callback\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"callback\":{\"description\":\"The callback to display\",\"multivalued\":false,\"options\":{\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\",\"METADATA_CALLBACK\":\"metadataCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\"},\"required\":true,\"title\":\"Callback\",\"type\":\"STRING\"},\"objectSharedProperty\":{\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Shared Property\",\"type\":\"STRING\"},\"objectTransientProperty\":{\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Transient Property\",\"type\":\"STRING\"},\"options\":{\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"multivalued\":false,\"required\":true,\"title\":\"Options\",\"type\":\"OBJECT\"},\"sharedProperty\":{\"description\":\"The shared state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Shared State Property\",\"type\":\"STRING\"},\"transientProperty\":{\"description\":\"The transient state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Transient State Property\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"tags\":[\"callback\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1" + }, + "response": { + "bodySize": 25151, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 25151, + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-628951673\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-628951673\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:30 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 683, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:30.122Z", + "time": 86, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 86 + } + }, + { + "_id": "7431bbfd9758c5297f14f6396d9f44c1", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 464, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "464" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1953, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"session-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session AM\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"session\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 94, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 94, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id session already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "94" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:30 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:16:30.216Z", + "time": 61, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 61 + } + }, + { + "_id": "28549f9482248fbe8d2f6629c88a8d02", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 464, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "464" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1975, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"session-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session AM\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"session\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/session-1" + }, + "response": { + "bodySize": 483, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 483, + "text": "{\"_id\":\"session-1\",\"_rev\":\"490056204\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"490056204\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "483" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:30 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 675, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:30.286Z", + "time": 79, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 79 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_all_file_3124693826/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_all_file_3124693826/oauth2_393036114/recording.har new file mode 100644 index 000000000..a78c9ced0 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_all_file_3124693826/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/import/0_all_file/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:28 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:28.828Z", + "time": 109, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 109 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_all_file_3124693826/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_all_file_3124693826/openidm_3290118515/recording.har new file mode 100644 index 000000000..d618e1886 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_all_file_3124693826/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/import/0_all_file/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:28 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:28.948Z", + "time": 71, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 71 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:16:29 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-651306b0-4b50-450e-aeab-e71d4092cbf5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:16:29.073Z", + "time": 57, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 57 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_f_2727575938/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_f_2727575938/am_1076162899/recording.har new file mode 100644 index 000000000..87b662fe8 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_f_2727575938/am_1076162899/recording.har @@ -0,0 +1,616 @@ +{ + "log": { + "_recordingName": "node/import/0_f/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:40.382Z", + "time": 103, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 103 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:40.616Z", + "time": 115, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 115 + } + }, + { + "_id": "b04389d8fe8e53386875bda48d89bb63", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1825, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1825" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1954, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"displayName\":\"Display State\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"displayFormat\":{\"defaultValue\":\"TABLE\",\"description\":\"The format in which to display the states.\",\"multivalued\":false,\"options\":{\"JSON\":\"Raw JSON\",\"TABLE\":\"HTML Table\"},\"required\":true,\"title\":\"Display Format\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"tags\":[\"debug\",\"testing\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id 8ab9f1aad4b4460a9c45d15fb148e221 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:15:40.806Z", + "time": 66, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 66 + } + }, + { + "_id": "9bd0d748bbe5673418b9344904c7982b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1825, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "1825" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2001, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"displayName\":\"Display State\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"displayFormat\":{\"defaultValue\":\"TABLE\",\"description\":\"The format in which to display the states.\",\"multivalued\":false,\"options\":{\"JSON\":\"Raw JSON\",\"TABLE\":\"HTML Table\"},\"required\":true,\"title\":\"Display Format\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"tags\":[\"debug\",\"testing\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/8ab9f1aad4b4460a9c45d15fb148e221-1" + }, + "response": { + "bodySize": 1844, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1844, + "text": "{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"278701568\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"278701568\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1844" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:40.880Z", + "time": 126, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 126 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_f_2727575938/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_f_2727575938/oauth2_393036114/recording.har new file mode 100644 index 000000000..e3c915bbb --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_f_2727575938/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/import/0_f/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:40.501Z", + "time": 98, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 98 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_f_2727575938/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_f_2727575938/openidm_3290118515/recording.har new file mode 100644 index 000000000..bf0efe92b --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_f_2727575938/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/import/0_f/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:40 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:40.614Z", + "time": 63, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 63 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:40 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-8c143d04-5a6f-4a8e-97e6-c2425dd8d9c5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:40.737Z", + "time": 57, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 57 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_i_f_3126144190/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_i_f_3126144190/am_1076162899/recording.har new file mode 100644 index 000000000..3d5353874 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_i_f_3126144190/am_1076162899/recording.har @@ -0,0 +1,616 @@ +{ + "log": { + "_recordingName": "node/import/0_i_f/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:12:33 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:12:32.970Z", + "time": 96, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 96 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:12:33 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:12:33.206Z", + "time": 112, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 112 + } + }, + { + "_id": "1175c4fdd69150a1690a688b187f4875", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1953, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c605506774a848f7877b4d17a453bd39 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:12:33 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:12:33.390Z", + "time": 69, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 69 + } + }, + { + "_id": "3aa26604cf0e0e1cf748cf742cbfb244", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2000, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1" + }, + "response": { + "bodySize": 532, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 532, + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"-1557560716\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-1557560716\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "532" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:12:33 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:12:33.465Z", + "time": 216, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 216 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_i_f_3126144190/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_i_f_3126144190/oauth2_393036114/recording.har new file mode 100644 index 000000000..123c6f0f0 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_i_f_3126144190/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/import/0_i_f/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:12:33 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:12:33.083Z", + "time": 110, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 110 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_i_f_3126144190/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_i_f_3126144190/openidm_3290118515/recording.har new file mode 100644 index 000000000..98871e0b6 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_i_f_3126144190/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/import/0_i_f/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:12:33 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:12:33.204Z", + "time": 70, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 70 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:12:33 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-9d852691-f685-4418-9a10-3ab7e8a1ddef" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:12:33.324Z", + "time": 56, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 56 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_n_f_D_367999672/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_n_f_D_367999672/am_1076162899/recording.har new file mode 100644 index 000000000..617e623da --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_n_f_D_367999672/am_1076162899/recording.har @@ -0,0 +1,616 @@ +{ + "log": { + "_recordingName": "node/import/0_n_f_D/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:02 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:02.841Z", + "time": 110, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 110 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:03 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:03.070Z", + "time": 113, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 113 + } + }, + { + "_id": "733b0209c304d46ce0fcfa49646e7753", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25131, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "25131" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1955, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"description\":\"Displays custom callback to the page\",\"displayName\":\"Display Callback\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"callback\":{\"description\":\"The callback to display\",\"multivalued\":false,\"options\":{\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\",\"METADATA_CALLBACK\":\"metadataCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\"},\"required\":true,\"title\":\"Callback\",\"type\":\"STRING\"},\"objectSharedProperty\":{\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Shared Property\",\"type\":\"STRING\"},\"objectTransientProperty\":{\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Transient Property\",\"type\":\"STRING\"},\"options\":{\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"multivalued\":false,\"required\":true,\"title\":\"Options\",\"type\":\"OBJECT\"},\"sharedProperty\":{\"description\":\"The shared state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Shared State Property\",\"type\":\"STRING\"},\"transientProperty\":{\"description\":\"The transient state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Transient State Property\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"tags\":[\"callback\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id ef81b1a52c914710b3388caebfe7233a already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:03 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:15:03.267Z", + "time": 64, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 64 + } + }, + { + "_id": "7b93c39dd7d90434240d968bf4d63f7b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25131, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "25131" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2002, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"description\":\"Displays custom callback to the page\",\"displayName\":\"Display Callback\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"callback\":{\"description\":\"The callback to display\",\"multivalued\":false,\"options\":{\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\",\"METADATA_CALLBACK\":\"metadataCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\"},\"required\":true,\"title\":\"Callback\",\"type\":\"STRING\"},\"objectSharedProperty\":{\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Shared Property\",\"type\":\"STRING\"},\"objectTransientProperty\":{\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Transient Property\",\"type\":\"STRING\"},\"options\":{\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"multivalued\":false,\"required\":true,\"title\":\"Options\",\"type\":\"OBJECT\"},\"sharedProperty\":{\"description\":\"The shared state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Shared State Property\",\"type\":\"STRING\"},\"transientProperty\":{\"description\":\"The transient state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Transient State Property\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"tags\":[\"callback\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1" + }, + "response": { + "bodySize": 25151, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 25151, + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1747357636\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1747357636\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:03 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 683, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:03.340Z", + "time": 179, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 179 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_n_f_D_367999672/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_n_f_D_367999672/oauth2_393036114/recording.har new file mode 100644 index 000000000..698880509 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_n_f_D_367999672/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/import/0_n_f_D/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:03 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:02.969Z", + "time": 91, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 91 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_n_f_D_367999672/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_n_f_D_367999672/openidm_3290118515/recording.har new file mode 100644 index 000000000..fc5887af2 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_n_f_D_367999672/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/import/0_n_f_D/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:03 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:03.068Z", + "time": 61, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 61 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:03 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-06b9797a-c7cf-4b37-b697-ce018b51d679" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:03.189Z", + "time": 56, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 56 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_node-id_file_directory_3791093613/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_node-id_file_directory_3791093613/am_1076162899/recording.har new file mode 100644 index 000000000..e7e7b25c2 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_node-id_file_directory_3791093613/am_1076162899/recording.har @@ -0,0 +1,616 @@ +{ + "log": { + "_recordingName": "node/import/0_node-id_file_directory/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:14:45 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:14:45.403Z", + "time": 102, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 102 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:14:45 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:14:45.641Z", + "time": 114, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 114 + } + }, + { + "_id": "1175c4fdd69150a1690a688b187f4875", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1953, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id c605506774a848f7877b4d17a453bd39 already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:14:45 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:14:45.828Z", + "time": 63, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 63 + } + }, + { + "_id": "3aa26604cf0e0e1cf748cf742cbfb244", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 511, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "511" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2000, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"description\":\"Checks if the user has a current session.\",\"displayName\":\"Has Session\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"properties\":{},\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"tags\":[\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1" + }, + "response": { + "bodySize": 531, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 531, + "text": "{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"-198825848\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-198825848\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "531" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:14:46 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 676, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:14:45.899Z", + "time": 148, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 148 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_node-id_file_directory_3791093613/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_node-id_file_directory_3791093613/oauth2_393036114/recording.har new file mode 100644 index 000000000..f5acd9773 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_node-id_file_directory_3791093613/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/import/0_node-id_file_directory/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:14:45 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:14:45.532Z", + "time": 95, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 95 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_node-id_file_directory_3791093613/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_node-id_file_directory_3791093613/openidm_3290118515/recording.har new file mode 100644 index 000000000..fbbddd2f9 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_node-id_file_directory_3791093613/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/import/0_node-id_file_directory/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:14:45 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:14:45.639Z", + "time": 67, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 67 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:14:45 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-82e2ebad-0308-4d26-ad29-8c176230572c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:14:45.763Z", + "time": 54, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 54 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_node-name_file_558192083/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_node-name_file_558192083/am_1076162899/recording.har new file mode 100644 index 000000000..252547880 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_node-name_file_558192083/am_1076162899/recording.har @@ -0,0 +1,616 @@ +{ + "log": { + "_recordingName": "node/import/0_node-name_file/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:22 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:22.218Z", + "time": 96, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 96 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:22 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:22.449Z", + "time": 121, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 121 + } + }, + { + "_id": "733b0209c304d46ce0fcfa49646e7753", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25131, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "25131" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1955, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"description\":\"Displays custom callback to the page\",\"displayName\":\"Display Callback\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"callback\":{\"description\":\"The callback to display\",\"multivalued\":false,\"options\":{\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\",\"METADATA_CALLBACK\":\"metadataCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\"},\"required\":true,\"title\":\"Callback\",\"type\":\"STRING\"},\"objectSharedProperty\":{\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Shared Property\",\"type\":\"STRING\"},\"objectTransientProperty\":{\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Transient Property\",\"type\":\"STRING\"},\"options\":{\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"multivalued\":false,\"required\":true,\"title\":\"Options\",\"type\":\"OBJECT\"},\"sharedProperty\":{\"description\":\"The shared state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Shared State Property\",\"type\":\"STRING\"},\"transientProperty\":{\"description\":\"The transient state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Transient State Property\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"tags\":[\"callback\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type" + }, + "response": { + "bodySize": 119, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 119, + "text": "{\"code\":409,\"reason\":\"Conflict\",\"message\":\"Node Type with resource id ef81b1a52c914710b3388caebfe7233a already exists\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "119" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:22 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 409, + "statusText": "Conflict" + }, + "startedDateTime": "2025-12-18T16:15:22.649Z", + "time": 60, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 60 + } + }, + { + "_id": "7b93c39dd7d90434240d968bf4d63f7b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25131, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "if-match", + "value": "*" + }, + { + "name": "content-length", + "value": "25131" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2002, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"description\":\"Displays custom callback to the page\",\"displayName\":\"Display Callback\",\"errorOutcome\":false,\"inputs\":[],\"outcomes\":[\"outcome\"],\"outputs\":[],\"properties\":{\"callback\":{\"description\":\"The callback to display\",\"multivalued\":false,\"options\":{\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\",\"METADATA_CALLBACK\":\"metadataCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\"},\"required\":true,\"title\":\"Callback\",\"type\":\"STRING\"},\"objectSharedProperty\":{\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Shared Property\",\"type\":\"STRING\"},\"objectTransientProperty\":{\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Object Attributes Transient Property\",\"type\":\"STRING\"},\"options\":{\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"multivalued\":false,\"required\":true,\"title\":\"Options\",\"type\":\"OBJECT\"},\"sharedProperty\":{\"description\":\"The shared state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Shared State Property\",\"type\":\"STRING\"},\"transientProperty\":{\"description\":\"The transient state property to put the callback input into (if applicable)\",\"multivalued\":false,\"required\":false,\"title\":\"Transient State Property\",\"type\":\"STRING\"}},\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"tags\":[\"callback\",\"utilities\"]}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1" + }, + "response": { + "bodySize": 25151, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 25151, + "text": "{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-665500600\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-665500600\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:22 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 683, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:22.720Z", + "time": 152, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 152 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_node-name_file_558192083/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_node-name_file_558192083/oauth2_393036114/recording.har new file mode 100644 index 000000000..b275c286d --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_node-name_file_558192083/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/import/0_node-name_file/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:22 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:22.336Z", + "time": 98, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 98 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/import_288002260/0_node-name_file_558192083/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/import_288002260/0_node-name_file_558192083/openidm_3290118515/recording.har new file mode 100644 index 000000000..d1d232257 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/import_288002260/0_node-name_file_558192083/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/import/0_node-name_file/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:22 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:22.447Z", + "time": 62, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 62 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:15:22 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-97609488-15b3-4a97-bda9-4d8cb3816484" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:15:22.577Z", + "time": 54, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 54 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/list_217798785/0_890022063/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/list_217798785/0_890022063/am_1076162899/recording.har new file mode 100644 index 000000000..1b0c20a61 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/list_217798785/0_890022063/am_1076162899/recording.har @@ -0,0 +1,452 @@ +{ + "log": { + "_recordingName": "node/list/0/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a333dc12-ea0e-4ae4-98d0-698940652334" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:05 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a333dc12-ea0e-4ae4-98d0-698940652334" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:08.131Z", + "time": 344, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 344 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a333dc12-ea0e-4ae4-98d0-698940652334" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:05 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a333dc12-ea0e-4ae4-98d0-698940652334" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:08.614Z", + "time": 122, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 122 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a333dc12-ea0e-4ae4-98d0-698940652334" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1242245001\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:05 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a333dc12-ea0e-4ae4-98d0-698940652334" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:08.809Z", + "time": 85, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 85 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/list_217798785/0_890022063/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/list_217798785/0_890022063/oauth2_393036114/recording.har new file mode 100644 index 000000000..9cd5c1164 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/list_217798785/0_890022063/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/list/0/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a333dc12-ea0e-4ae4-98d0-698940652334" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:05 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a333dc12-ea0e-4ae4-98d0-698940652334" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:08.498Z", + "time": 100, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 100 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/list_217798785/0_890022063/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/list_217798785/0_890022063/openidm_3290118515/recording.har new file mode 100644 index 000000000..9e38f7a88 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/list_217798785/0_890022063/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/list/0/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a333dc12-ea0e-4ae4-98d0-698940652334" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:05 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a333dc12-ea0e-4ae4-98d0-698940652334" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:08.612Z", + "time": 71, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 71 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a333dc12-ea0e-4ae4-98d0-698940652334" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:05 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-a333dc12-ea0e-4ae4-98d0-698940652334" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:08.741Z", + "time": 58, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 58 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/list_217798785/0_l_2828241652/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/list_217798785/0_l_2828241652/am_1076162899/recording.har new file mode 100644 index 000000000..368930273 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/list_217798785/0_l_2828241652/am_1076162899/recording.har @@ -0,0 +1,1488 @@ +{ + "log": { + "_recordingName": "node/list/0_l/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:23 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:27.253Z", + "time": 96, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 96 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:24 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:27.489Z", + "time": 122, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 122 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1242245001\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:24 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:27.690Z", + "time": 82, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 82 + } + }, + { + "_id": "efac194723689175d66e1e6198bce6c4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1?_action=journeys" + }, + "response": { + "bodySize": 386, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 386, + "text": "{\"/bravo\":{\"FrodoTestJourney12\":[\"d8bd62e2-a4e7-4e08-bb28-10570aa31fcf\",\"18edd91b-5e15-49df-b3c3-764114a8ebb3\",\"eaf91b8a-bb71-4037-97ec-cd2e54885668\",\"ee549716-666c-4b9d-baab-defe1a93eb6c\",\"03416cc6-588b-409a-919f-038bb8194c81\",\"0a3d5de0-9426-4a9a-aae0-163eda075d43\",\"f9155861-f7c8-4022-9bed-e4ef5b238824\",\"65c2a8cd-e623-4c5d-b420-e55fc5105f43\",\"1a002d5d-5ad5-4d0e-965f-a0f26278d08d\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "386" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:24 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:27.781Z", + "time": 70, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 70 + } + }, + { + "_id": "bd2962cc1f6a7a0ffca1ff6fb09239f6", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/e5ad0110c8ee4dafaae983003cd05d4a-1?_action=journeys" + }, + "response": { + "bodySize": 2, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 2, + "text": "{}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "2" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:24 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 654, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:27.857Z", + "time": 61, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 61 + } + }, + { + "_id": "562468dbe011a12ee68f2ca3d16d0288", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1959, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/session-1?_action=journeys" + }, + "response": { + "bodySize": 74, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 74, + "text": "{\"/bravo\":{\"FrodoTestJourney12\":[\"8c4f5d43-d7f8-4ac2-8aae-d38f8f5cb9cb\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "74" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:24 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:27.926Z", + "time": 64, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 64 + } + }, + { + "_id": "f2601c0e91aac520b12ee8d25c80560a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/8ab9f1aad4b4460a9c45d15fb148e221-1?_action=journeys" + }, + "response": { + "bodySize": 147, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 147, + "text": "{\"/alpha\":{\"PrestonTestJourney\":[\"4a1e59db-dbcc-463c-ac84-3e8ba6bc8b22\"]},\"/bravo\":{\"PrestonTestJourney\":[\"4a1e59db-dbcc-463c-ac84-3e8ba6bc8b22\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "147" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:24 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:27.998Z", + "time": 62, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 62 + } + }, + { + "_id": "61f6c2a39a30a87e79f03d3df67c393f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c15e2efb3deb4d4ea338c74a6440b69f-1?_action=journeys" + }, + "response": { + "bodySize": 147, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 147, + "text": "{\"/alpha\":{\"PrestonTestJourney\":[\"c4f83038-1763-4434-95fe-cf10faca394d\"]},\"/bravo\":{\"PrestonTestJourney\":[\"c4f83038-1763-4434-95fe-cf10faca394d\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "147" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:24 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:28.067Z", + "time": 63, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 63 + } + }, + { + "_id": "eab99da0620b98ea3b5c0ec1fdcb9f2e", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1?_action=journeys" + }, + "response": { + "bodySize": 225, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 225, + "text": "{\"/alpha\":{\"PrestonTestJourney\":[\"f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5\",\"8919c0d5-b40f-43df-b8f3-0934ae79920f\"]},\"/bravo\":{\"PrestonTestJourney\":[\"f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5\",\"8919c0d5-b40f-43df-b8f3-0934ae79920f\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "225" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:24 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:28.137Z", + "time": 65, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 65 + } + }, + { + "_id": "5229ab782893cdf684157ed2cff0d366", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c6063fb2f5dc42dd9772bedc93898bd8-1?_action=journeys" + }, + "response": { + "bodySize": 147, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 147, + "text": "{\"/alpha\":{\"PrestonTestJourney\":[\"3f988d7d-5980-492b-a43b-8476752e9d74\"]},\"/bravo\":{\"PrestonTestJourney\":[\"3f988d7d-5980-492b-a43b-8476752e9d74\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "147" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:24 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:28.211Z", + "time": 60, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 60 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/list_217798785/0_l_2828241652/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/list_217798785/0_l_2828241652/oauth2_393036114/recording.har new file mode 100644 index 000000000..2d5aa9645 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/list_217798785/0_l_2828241652/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/list/0_l/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:24 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:27.374Z", + "time": 100, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 100 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/list_217798785/0_l_2828241652/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/list_217798785/0_l_2828241652/openidm_3290118515/recording.har new file mode 100644 index 000000000..a25291aed --- /dev/null +++ b/test/e2e/mocks/node_2982235661/list_217798785/0_l_2828241652/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/list/0_l/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:24 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:27.487Z", + "time": 68, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 68 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:24 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5e556d3d-2d01-4a9f-a542-860aec05cd5c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:27.618Z", + "time": 64, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 64 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/list_217798785/0_long_276218670/am_1076162899/recording.har b/test/e2e/mocks/node_2982235661/list_217798785/0_long_276218670/am_1076162899/recording.har new file mode 100644 index 000000000..dd30eba2e --- /dev/null +++ b/test/e2e/mocks/node_2982235661/list_217798785/0_long_276218670/am_1076162899/recording.har @@ -0,0 +1,1488 @@ +{ + "log": { + "_recordingName": "node/list/0_long/am", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccd7a5defd0fdeaa986a2b54642d911a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "accept-api-version", + "value": "resource=1.1" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 385, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.1" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:47 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:50.728Z", + "time": 107, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 107 + } + }, + { + "_id": "6125d0328ad0dcaee55f73fd8b22ca14", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1913, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 281, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 281, + "text": "{\"_id\":\"version\",\"_rev\":\"1652964296\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 0f3c85c8bbc4e5c93454ee525528ade846b19bcb (2025-December-04 22:27)\",\"revision\":\"0f3c85c8bbc4e5c93454ee525528ade846b19bcb\",\"date\":\"2025-December-04 22:27\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1652964296\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "281" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:47 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 677, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:50.969Z", + "time": 113, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 113 + } + }, + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"-1360543129\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"1242245001\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"session-1\",\"_rev\":\"717898089\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-609282293\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"-803916807\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"1974329536\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"1371687245\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:47 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:51.158Z", + "time": 83, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 83 + } + }, + { + "_id": "efac194723689175d66e1e6198bce6c4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/ef81b1a52c914710b3388caebfe7233a-1?_action=journeys" + }, + "response": { + "bodySize": 386, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 386, + "text": "{\"/bravo\":{\"FrodoTestJourney12\":[\"d8bd62e2-a4e7-4e08-bb28-10570aa31fcf\",\"18edd91b-5e15-49df-b3c3-764114a8ebb3\",\"eaf91b8a-bb71-4037-97ec-cd2e54885668\",\"ee549716-666c-4b9d-baab-defe1a93eb6c\",\"03416cc6-588b-409a-919f-038bb8194c81\",\"0a3d5de0-9426-4a9a-aae0-163eda075d43\",\"f9155861-f7c8-4022-9bed-e4ef5b238824\",\"65c2a8cd-e623-4c5d-b420-e55fc5105f43\",\"1a002d5d-5ad5-4d0e-965f-a0f26278d08d\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "386" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:47 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:51.251Z", + "time": 74, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 74 + } + }, + { + "_id": "bd2962cc1f6a7a0ffca1ff6fb09239f6", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/e5ad0110c8ee4dafaae983003cd05d4a-1?_action=journeys" + }, + "response": { + "bodySize": 2, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 2, + "text": "{}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "2" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:47 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 654, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:51.331Z", + "time": 66, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 66 + } + }, + { + "_id": "562468dbe011a12ee68f2ca3d16d0288", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1959, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/session-1?_action=journeys" + }, + "response": { + "bodySize": 74, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 74, + "text": "{\"/bravo\":{\"FrodoTestJourney12\":[\"8c4f5d43-d7f8-4ac2-8aae-d38f8f5cb9cb\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "74" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:48 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 655, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:51.405Z", + "time": 68, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 68 + } + }, + { + "_id": "f2601c0e91aac520b12ee8d25c80560a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/8ab9f1aad4b4460a9c45d15fb148e221-1?_action=journeys" + }, + "response": { + "bodySize": 147, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 147, + "text": "{\"/alpha\":{\"PrestonTestJourney\":[\"4a1e59db-dbcc-463c-ac84-3e8ba6bc8b22\"]},\"/bravo\":{\"PrestonTestJourney\":[\"4a1e59db-dbcc-463c-ac84-3e8ba6bc8b22\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "147" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:48 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:51.484Z", + "time": 64, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 64 + } + }, + { + "_id": "61f6c2a39a30a87e79f03d3df67c393f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c15e2efb3deb4d4ea338c74a6440b69f-1?_action=journeys" + }, + "response": { + "bodySize": 147, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 147, + "text": "{\"/alpha\":{\"PrestonTestJourney\":[\"c4f83038-1763-4434-95fe-cf10faca394d\"]},\"/bravo\":{\"PrestonTestJourney\":[\"c4f83038-1763-4434-95fe-cf10faca394d\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "147" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:48 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:51.555Z", + "time": 64, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 64 + } + }, + { + "_id": "eab99da0620b98ea3b5c0ec1fdcb9f2e", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c605506774a848f7877b4d17a453bd39-1?_action=journeys" + }, + "response": { + "bodySize": 225, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 225, + "text": "{\"/alpha\":{\"PrestonTestJourney\":[\"f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5\",\"8919c0d5-b40f-43df-b8f3-0934ae79920f\"]},\"/bravo\":{\"PrestonTestJourney\":[\"f7b532b3-b322-49d5-bb5d-e9ebe8ae0fb5\",\"8919c0d5-b40f-43df-b8f3-0934ae79920f\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "225" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:48 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:51.628Z", + "time": 67, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 67 + } + }, + { + "_id": "5229ab782893cdf684157ed2cff0d366", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1984, + "httpVersion": "HTTP/1.1", + "method": "POST", + "queryString": [ + { + "name": "_action", + "value": "journeys" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type/c6063fb2f5dc42dd9772bedc93898bd8-1?_action=journeys" + }, + "response": { + "bodySize": 147, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 147, + "text": "{\"/alpha\":{\"PrestonTestJourney\":[\"3f988d7d-5980-492b-a43b-8476752e9d74\"]},\"/bravo\":{\"PrestonTestJourney\":[\"3f988d7d-5980-492b-a43b-8476752e9d74\"]}}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "147" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:48 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 656, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:51.703Z", + "time": 65, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 65 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/list_217798785/0_long_276218670/oauth2_393036114/recording.har b/test/e2e/mocks/node_2982235661/list_217798785/0_long_276218670/oauth2_393036114/recording.har new file mode 100644 index 000000000..3bdbe1468 --- /dev/null +++ b/test/e2e/mocks/node_2982235661/list_217798785/0_long_276218670/oauth2_393036114/recording.har @@ -0,0 +1,142 @@ +{ + "log": { + "_recordingName": "node/list/0_long/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1329, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/x-www-form-urlencoded" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1329" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 440, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1787, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1787, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:autoaccess:* fr:idc:esv:* fr:idc:content-security-policy:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1787" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:47 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 451, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:50.857Z", + "time": 98, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 98 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/node_2982235661/list_217798785/0_long_276218670/openidm_3290118515/recording.har b/test/e2e/mocks/node_2982235661/list_217798785/0_long_276218670/openidm_3290118515/recording.har new file mode 100644 index 000000000..0ce09f79f --- /dev/null +++ b/test/e2e/mocks/node_2982235661/list_217798785/0_long_276218670/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "node/list/0_long/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:47 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:50.967Z", + "time": 77, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 77 + } + }, + { + "_id": "9cb8561357870863838a9948da32d1e8", + "_order": 1, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1925, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/ad62492c-d064-4952-95ed-0a74ed5b2fd1?_fields=%2A" + }, + "response": { + "bodySize": 1476, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1476, + "text": "{\"_id\":\"ad62492c-d064-4952-95ed-0a74ed5b2fd1\",\"_rev\":\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\",\"accountStatus\":\"active\",\"name\":\"Frodo TriVir\",\"description\":\"Frodo service account for use by TriVir\",\"scopes\":[\"fr:am:*\",\"fr:autoaccess:*\",\"fr:idc:analytics:*\",\"fr:idc:certificate:*\",\"fr:idc:content-security-policy:*\",\"fr:idc:certificate:read\",\"fr:idc:content-security-policy:read\",\"fr:idc:cookie-domain:*\",\"fr:idc:cookie-domain:read\",\"fr:idc:custom-domain:read\",\"fr:idc:custom-domain:*\",\"fr:idc:esv:*\",\"fr:idc:promotion:*\",\"fr:idc:promotion:read\",\"fr:idc:release:*\",\"fr:idc:release:read\",\"fr:idc:sso-cookie:*\",\"fr:idc:sso-cookie:read\",\"fr:idm:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"e\\\":\\\"AQAB\\\",\\\"kty\\\":\\\"RSA\\\",\\\"n\\\":\\\"rNWWJ9vZGkyMSXhaZVBEufp3oODou19gVDLje2_AMcw2Id4bILpBJ2Ob2LF4y2yV6l4m_OXVApvj5dInLqbsn_ZQoEmqc6AP6XFqAog4w-xRy5XFHBf1cKws3a5ANcZXlw-NTnuDFvzXkQXYeGH1WSqBIeVXlpjPe0C-7vtbN4oIZyy6QaFjqv7BEjmZ1F1YoHQryPzJl58rnomcQFqIk42-UMGfQt0w63ON1mtHyQOMWUduTFIU67_jGW7YKIrYs4JO9yizKR-4Uab9M1hKkYZRUmWCgL53YJtMjg-uVRWixKhJJy3fSCBDa_SXcz-c1glbg9fGQh908WRoN3tT4B0CaeDHexLId80Vuaq3VkplH6FZHzW9-KL8Td_0kOrKKbnLgtwRvr3Fxf95hLRVm1v4QCRujlRx5wtgkCWWHl9LET1d_MeLVYrfjz4p_Ha8ui8eWNPQLIPPcP3rbHX1py9zHHREt2Jp7ezA-lFnHbCAaoO4IksT5cIjmx1p1I_JhrVECXTn3J-s0ow3w9YIksXPovT2m-ytDWcqRJ-37OCr9xcO9CK2q9HAOjoqIpkJ0TfHrXw-YpqV9QR-sF79h-qwivBY2yrAUkfKoJwbBgjX60EDUpjEj5g157Jj576GVZtdRZgHRwzdcIFP2KyBrD3AfStpybVu2L2ZoOgebs0\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Dec 2025 16:05:47 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"03de0609-c46a-478a-bc58-6f69391b4a0d-2546\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-length", + "value": "1476" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-3e386868-7eda-45ba-8115-553ac5e4e8bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 682, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T16:05:51.088Z", + "time": 57, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 57 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/npmjs_1455397529/recording.har b/test/e2e/mocks/npmjs_1455397529/recording.har index 11f3a656b..9fb7d6b38 100644 --- a/test/e2e/mocks/npmjs_1455397529/recording.har +++ b/test/e2e/mocks/npmjs_1455397529/recording.har @@ -25,7 +25,7 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/2.0.3" + "value": "@rockcarver/frodo-lib/3.3.3" }, { "name": "accept-encoding", @@ -43,18 +43,28 @@ "url": "https://registry.npmjs.org/@rockcarver/frodo-cli" }, "response": { - "bodySize": 143894, + "bodySize": 150940, "content": { "encoding": "base64", "mimeType": "application/json", - "size": 143894, - "text": "[\"H4sIAAAAAAAAAwAAAP//\",\"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\",\"UQ7/bwAAAP//\",\"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\",\"AwCP8plMsiYOAA==\"]" + "size": 150940, + "text": "[\"H4sIAAAAAAAAAwAAAP//\",\"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\"]" }, - "cookies": [], + "cookies": [ + { + "domain": ".npmjs.org", + "httpOnly": true, + "name": "_cfuvid", + "path": "/", + "sameSite": "None", + "secure": true, + "value": "" + } + ], "headers": [ { "name": "date", - "value": "Thu, 15 Aug 2024 21:33:11 GMT" + "value": "Wed, 17 Dec 2025 20:35:13 GMT" }, { "name": "content-type", @@ -68,9 +78,13 @@ "name": "connection", "value": "keep-alive" }, + { + "name": "content-encoding", + "value": "gzip" + }, { "name": "cf-ray", - "value": "8b3c4d2dadd451dc-DEN" + "value": "9af934aaa95e7c2b-DEN" }, { "name": "cf-cache-status", @@ -86,33 +100,34 @@ }, { "name": "etag", - "value": "W/\"10084d954217df9fa21b352092b9fd2a\"" + "value": "W/\"bed6dea0b301422437d713481f848cf9\"" }, { "name": "last-modified", - "value": "Wed, 14 Aug 2024 03:16:18 GMT" + "value": "Tue, 16 Sep 2025 03:22:01 GMT" }, { "name": "vary", "value": "accept-encoding, accept" }, { - "name": "server", - "value": "cloudflare" + "_fromType": "array", + "name": "set-cookie", + "value": "_cfuvid=; path=/; domain=.npmjs.org; HttpOnly; Secure; SameSite=None" }, { - "name": "content-encoding", - "value": "gzip" + "name": "server", + "value": "cloudflare" } ], - "headersSize": 416, + "headersSize": 573, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2024-08-15T21:33:10.572Z", - "time": 673, + "startedDateTime": "2025-12-17T20:35:13.614Z", + "time": 403, "timings": { "blocked": -1, "connect": -1, @@ -120,7 +135,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 673 + "wait": 403 } } ], diff --git a/test/e2e/mocks/script_540962730/describe_1360419304/0_un_4228569859/am_1076162899/recording.har b/test/e2e/mocks/script_540962730/describe_1360419304/0_un_4228569859/am_1076162899/recording.har index abd77bbde..df835c225 100644 --- a/test/e2e/mocks/script_540962730/describe_1360419304/0_un_4228569859/am_1076162899/recording.har +++ b/test/e2e/mocks/script_540962730/describe_1360419304/0_un_4228569859/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/script_540962730/list_217798785/0_lu_3779266835/am_1076162899/recording.har b/test/e2e/mocks/script_540962730/list_217798785/0_lu_3779266835/am_1076162899/recording.har index 85ce3e77f..9cdda38a7 100644 --- a/test/e2e/mocks/script_540962730/list_217798785/0_lu_3779266835/am_1076162899/recording.har +++ b/test/e2e/mocks/script_540962730/list_217798785/0_lu_3779266835/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/mocks/script_540962730/list_217798785/0_u_2442356415/am_1076162899/recording.har b/test/e2e/mocks/script_540962730/list_217798785/0_u_2442356415/am_1076162899/recording.har index 6095d60a1..10539fa20 100644 --- a/test/e2e/mocks/script_540962730/list_217798785/0_u_2442356415/am_1076162899/recording.har +++ b/test/e2e/mocks/script_540962730/list_217798785/0_u_2442356415/am_1076162899/recording.har @@ -7,6 +7,154 @@ "version": "6.0.6" }, "entries": [ + { + "_id": "e6efe3392d787815b92258f4573fd0b4", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/3.3.3" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1949, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_queryFilter", + "value": "true" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/node-designer/node-type?_queryFilter=true" + }, + "response": { + "bodySize": 33589, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 33589, + "text": "{\"result\":[{\"_id\":\"c6063fb2f5dc42dd9772bedc93898bd8-1\",\"_rev\":\"855360523\",\"serviceName\":\"c6063fb2f5dc42dd9772bedc93898bd8\",\"displayName\":\"ALU\",\"description\":\"Simple ALU that performs basic binary math operations. Expects an \\\"x\\\" and \\\"y\\\" value on the shared state, and will produce a new \\\"z\\\" value on the shared state as output.\",\"outcomes\":[\"Success\"],\"outputs\":[\"z\"],\"inputs\":[\"x\",\"y\"],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n MULTIPLY: \\\"MULTIPLY\\\",\\n DIVIDE: \\\"DIVIDE\\\"\\n}\\n\\nfunction main() {\\n var a = Number(properties.a);\\n var b = Number(properties.b);\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"z\\\", a + b);\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"z\\\", a - b);\\n break;\\n case OPERATORS.MULTIPLY:\\n nodeState.putShared(\\\"z\\\", a * b);\\n break;\\n case OPERATORS.DIVIDE:\\n if (b == 0) throw new Error(\\\"Cannot divide by 0\\\");\\n nodeState.putShared(\\\"z\\\", a / b);\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"utilities\"],\"properties\":{\"operator\":{\"title\":\"Operator\",\"description\":\"The operation to perform.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"ADD\",\"options\":{\"ADD\":\"+\",\"MULTIPLY\":\"*\",\"SUBTRACT\":\"-\",\"DIVIDE\":\"/\"},\"multivalued\":false}}},{\"_id\":\"e5ad0110c8ee4dafaae983003cd05d4a-1\",\"_rev\":\"-2070743967\",\"serviceName\":\"e5ad0110c8ee4dafaae983003cd05d4a\",\"displayName\":\"Generate JWT\",\"description\":\"Generate a signed JWT using the HMAC SHA-256 algorithm.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var aud = properties.audience;\\nvar iss = properties.issuer;\\nvar validity = properties.validity;\\nvar esv = properties.signingkey;\\n\\nvar signingkey = systemEnv.getProperty(esv);\\n\\nvar username = nodeState.get(\\\"username\\\");\\n\\nvar data = {\\n jwtType:\\\"SIGNED\\\",\\n jwsAlgorithm: \\\"HS256\\\",\\n issuer: iss,\\n subject: username,\\n audience: aud,\\n type: \\\"JWT\\\",\\n validityMinutes: validity,\\n signingKey: signingkey\\n};\\n\\nvar jwt = jwtAssertion.generateJwt(data);\\n\\nif (jwt !== null && jwt.length > 0) {\\n nodeState.putShared(\\\"assertionJwt\\\" , jwt);\\n action.goTo(\\\"True\\\");\\n} else {\\n action.goTo(\\\"False\\\");\\n}\\n\",\"errorOutcome\":true,\"tags\":[\"Utilities\",\"utilities\"],\"properties\":{\"audience\":{\"title\":\"Audience\",\"description\":\"The audience (aud) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"issuer\":{\"title\":\"Issuer\",\"description\":\"The issuer (iss) claim\",\"type\":\"STRING\",\"required\":true,\"multivalued\":false},\"signingkey\":{\"title\":\"HMAC Signing Key\",\"description\":\"The secret label for the HMAC signing key\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"esv.signing.key\",\"multivalued\":false},\"validity\":{\"title\":\"Validity (minutes)\",\"description\":\"\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":5,\"multivalued\":false}}},{\"_id\":\"ef81b1a52c914710b3388caebfe7233a-1\",\"_rev\":\"1859562163\",\"serviceName\":\"ef81b1a52c914710b3388caebfe7233a\",\"displayName\":\"Display Callback\",\"description\":\"Displays custom callback to the page\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: 'outcome'\\n};\\n\\nvar CALLBACKS = {\\n\\tBOOLEAN_ATTRIBUTE_INPUT_CALLBACK: \\\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tCHOICE_CALLBACK: \\\"CHOICE_CALLBACK\\\",\\n\\tCONFIRMATION_CALLBACK: \\\"CONFIRMATION_CALLBACK\\\",\\n\\tCONSENT_MAPPING_CALLBACK: \\\"CONSENT_MAPPING_CALLBACK\\\",\\n\\tDEVICE_PROFILE_CALLBACK: \\\"DEVICE_PROFILE_CALLBACK\\\",\\n\\tHIDDEN_VALUE_CALLBACK: \\\"HIDDEN_VALUE_CALLBACK\\\",\\n\\tHTTP_CALLBACK: \\\"HTTP_CALLBACK\\\",\\n\\tIDP_CALLBACK: \\\"IDP_CALLBACK\\\",\\n\\tKBA_CREATE_CALLBACK: \\\"KBA_CREATE_CALLBACK\\\",\\n\\tLANGUAGE_CALLBACK: \\\"LANGUAGE_CALLBACK\\\",\\n\\tMETADATA_CALLBACK: \\\"METADATA_CALLBACK\\\",\\n\\tNAME_CALLBACK: \\\"NAME_CALLBACK\\\",\\n\\tNUMBER_ATTRIBUTE_INPUT_CALLBACK: \\\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tPASSWORD_CALLBACK: \\\"PASSWORD_CALLBACK\\\",\\n\\tPOLLING_WAIT_CALLBACK: \\\"POLLING_WAIT_CALLBACK\\\",\\n REDIRECT_CALLBACK: \\\"REDIRECT_CALLBACK\\\",\\n\\tSCRIPT_TEXT_OUTPUT_CALLBACK: \\\"SCRIPT_TEXT_OUTPUT_CALLBACK\\\",\\n\\tSELECT_IDP_CALLBACK: \\\"SELECT_IDP_CALLBACK\\\",\\n\\tSTRING_ATTRIBUTE_INPUT_CALLBACK: \\\"STRING_ATTRIBUTE_INPUT_CALLBACK\\\",\\n\\tSUSPENDED_TEXT_OUTPUT_CALLBACK: \\\"SUSPENDED_TEXT_OUTPUT_CALLBACK\\\",\\n\\tTERMS_AND_CONDITIONS_CALLBACK: \\\"TERMS_AND_CONDITIONS_CALLBACK\\\",\\n\\tTEXT_INPUT_CALLBACK: \\\"TEXT_INPUT_CALLBACK\\\",\\n\\tTEXT_OUTPUT_CALLBACK: \\\"TEXT_OUTPUT_CALLBACK\\\",\\n\\tVALIDATED_PASSWORD_CALLBACK: \\\"VALIDATED_PASSWORD_CALLBACK\\\",\\n\\tVALIDATED_USERNAME_CALLBACK: \\\"VALIDATED_USERNAME_CALLBACK\\\",\\n\\tX509_CERTIFICATE_CALLBACK: \\\"X509_CERTIFICATE_CALLBACK\\\"\\n}\\n\\nfunction isStringPresent(value) {\\n return value;\\n}\\n\\nfunction getString(value) {\\n return value || '';\\n}\\n\\nfunction isArrayPresent(value) {\\n return value;\\n}\\n\\nfunction getArray(value) {\\n return value ? JSON.parse(value) : [];\\n}\\n\\nfunction isObjectPresent(value) {\\n return value;\\n}\\n\\nfunction getObject(value) {\\n return value ? JSON.parse(value) : {};\\n}\\n\\nfunction isIntPresent(value) {\\n return value;\\n}\\n\\nfunction getInt(value) {\\n return value ? parseInt(value) : 0;\\n}\\n\\nfunction isDoublePresent(value) {\\n return value;\\n}\\n\\nfunction getDouble(value) {\\n return value ? parseFloat(value) : 0.0;\\n}\\n\\nfunction isBooleanPresent(value) {\\n return value;\\n}\\n\\nfunction getBoolean(value) {\\n return value ? value.toLowerCase() === 'true' : false;\\n}\\n\\nfunction setProperty(value) {\\n if (properties.sharedProperty) nodeState.putShared(properties.sharedProperty, value);\\n if (properties.transientProperty) nodeState.putTransient(properties.transientProperty, value);\\n if (properties.objectSharedProperty) {\\n var attributes = {};\\n attributes[properties.objectSharedProperty] = value;\\n nodeState.mergeShared({\\n objectAttributes: attributes\\n });\\n }\\n if (properties.objectTransientProperty) {\\n var attributes = {};\\n attributes[properties.objectTransientProperty] = value;\\n nodeState.mergeTransient({\\n objectAttributes: attributes\\n });\\n }\\n}\\n\\nfunction booleanAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getBoolean(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.booleanAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction choiceCallback() {\\n var prompt = getString(properties.options.prompt);\\n var choices = getArray(properties.options.choices);\\n var defaultChoice = getInt(properties.options.defaultChoice);\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n callbacksBuilder.choiceCallback(prompt, choices, defaultChoice, multipleSelectionsAllowed);\\n}\\n\\nfunction confirmationCallback() {\\n var prompt = getString(properties.options.prompt);\\n var messageType = getInt(properties.options.messageType);\\n var options = getArray(properties.options.options);\\n var optionType = getInt(properties.options.optionType);\\n var defaultOption = getInt(properties.options.defaultOption);\\n if (isStringPresent(properties.options.prompt)) {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(prompt, messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(prompt, messageType, options, defaultOption);\\n }\\n } else {\\n if (isIntPresent(properties.options.optionType)) {\\n callbacksBuilder.confirmationCallback(messageType, optionType, defaultOption);\\n } else {\\n callbacksBuilder.confirmationCallback(messageType, options, defaultOption);\\n }\\n }\\n}\\n\\nfunction consentMappingCallback() {\\n var config = getObject(properties.options.config);\\n var message = getString(properties.options.message);\\n var isRequired = getBoolean(properties.options.isRequired);\\n var name = getString(properties.options.name);\\n var displayName = getString(properties.options.displayName);\\n var icon = getString(properties.options.icon);\\n var accessLevel = getString(properties.options.accessLevel);\\n var titles = getArray(properties.options.titles);\\n if (isObjectPresent(properties.options.prompt)) {\\n callbacksBuilder.consentMappingCallback(config, message, isRequired);\\n } else {\\n callbacksBuilder.consentMappingCallback(name, displayName, icon, accessLevel, titles, message, isRequired);\\n }\\n}\\n\\nfunction deviceProfileCallback() {\\n var metadata = getBoolean(properties.options.metadata);\\n var location = getBoolean(properties.options.location);\\n var message = getString(properties.options.message);\\n callbacksBuilder.deviceProfileCallback(metadata, location, message);\\n}\\n\\nfunction hiddenValueCallback() {\\n var id = getString(properties.options.id);\\n var value = getString(properties.options.value);\\n callbacksBuilder.hiddenValueCallback(id, value);\\n}\\n\\nfunction httpCallback() {\\n var authorizationHeader = getString(properties.options.authorizationHeader);\\n var negotiationHeader = getString(properties.options.negotiationHeader);\\n var authRHeader = getString(properties.options.authRHeader);\\n var negoName = getString(properties.options.negoName);\\n var negoValue = getString(properties.options.negoValue);\\n if (isStringPresent(properties.options.authorizationHeader) || isStringPresent(properties.options.negotiationHeader)) {\\n var errorCode = getString(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authorizationHeader, negotiationHeader, errorCode);\\n } else {\\n var errorCode = getInt(properties.options.errorCode);\\n callbacksBuilder.httpCallback(authRHeader, negoName, negoValue, errorCode);\\n }\\n}\\n\\nfunction idPCallback() {\\n var provider = getString(properties.options.provider);\\n var clientId = getString(properties.options.clientId);\\n var redirectUri = getString(properties.options.redirectUri);\\n var scope = getArray(properties.options.scope);\\n var nonce = getString(properties.options.nonce);\\n var request = getString(properties.options.request);\\n var requestUri = getString(properties.options.requestUri);\\n var acrValues = getArray(properties.options.acrValues);\\n var requestNativeAppForUserInfo = getBoolean(properties.options.requestNativeAppForUserInfo);\\n var token = getString(properties.options.token);\\n var tokenType = getString(properties.options.tokenType);\\n if (isStringPresent(properties.options.token) || isStringPresent(properties.options.tokenType)) {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo, token, tokenType);\\n } else {\\n callbacksBuilder.idPCallback(provider, clientId, redirectUri, scope, nonce, request, requestUri, acrValues, requestNativeAppForUserInfo);\\n }\\n}\\n\\nfunction kbaCreateCallback() {\\n var prompt = getString(properties.options.prompt);\\n var predefinedQuestions = getArray(properties.options.predefinedQuestions);\\n var allowUserDefinedQuestions = getBoolean(properties.options.allowUserDefinedQuestions);\\n callbacksBuilder.kbaCreateCallback(prompt, predefinedQuestions, allowUserDefinedQuestions);\\n}\\n\\nfunction languageCallback() {\\n var language = getString(properties.options.language);\\n var country = getString(properties.options.country);\\n callbacksBuilder.languageCallback(language, country);\\n}\\n\\nfunction metadataCallback() {\\n var outputValue = getObject(properties.options.outputValue);\\n callbacksBuilder.metadataCallback(outputValue);\\n}\\n\\nfunction nameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultName = getString(properties.options.defaultName);\\n if (isStringPresent(properties.options.defaultName)) {\\n callbacksBuilder.nameCallback(prompt, defaultName);\\n } else {\\n callbacksBuilder.nameCallback(prompt);\\n }\\n}\\n\\nfunction numberAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getDouble(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.numberAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction passwordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n callbacksBuilder.passwordCallback(prompt, echoOn);\\n}\\n\\nfunction pollingWaitCallback() {\\n var waitTime = getString(properties.options.waitTime);\\n var message = getString(properties.options.message);\\n callbacksBuilder.pollingWaitCallback(waitTime, message);\\n}\\n\\nfunction redirectCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction scriptTextOutputCallback() {\\n var message = getString(properties.options.message);\\n callbacksBuilder.scriptTextOutputCallback(message);\\n}\\n\\nfunction selectIdPCallback() {\\n var providers = getObject(properties.options.providers);\\n callbacksBuilder.selectIdPCallback(providers);\\n}\\n\\nfunction stringAttributeInputCallback() {\\n var name = getString(properties.options.name);\\n var prompt = getString(properties.options.prompt);\\n var value = getString(properties.options.value);\\n var required = getBoolean(properties.options.required);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isBooleanPresent(properties.options.validateOnly) || isObjectPresent(properties.options.policies)) {\\n if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, policies, validateOnly);\\n }\\n } else if (isArrayPresent(failedPolicies)) {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required, failedPolicies);\\n } else {\\n callbacksBuilder.stringAttributeInputCallback(name, prompt, value, required);\\n }\\n}\\n\\nfunction suspendedTextOutputCallback() {\\n var messageType = getInt(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.suspendedTextOutputCallback(messageType, message);\\n}\\n\\nfunction termsAndConditionsCallback() {\\n var version = getString(properties.options.version);\\n var terms = getString(properties.options.terms);\\n var createDate = getString(properties.options.createDate);\\n callbacksBuilder.termsAndConditionsCallback(version, terms, createDate);\\n}\\n\\nfunction textInputCallback() {\\n var prompt = getString(properties.options.prompt);\\n var defaultText = getString(properties.options.defaultText);\\n if (isStringPresent(properties.options.defaultText)) {\\n callbacksBuilder.textInputCallback(prompt, defaultText);\\n } else {\\n callbacksBuilder.textInputCallback(prompt);\\n }\\n}\\n\\nfunction textOutputCallback() {\\n var messageType = getString(properties.options.messageType);\\n var message = getString(properties.options.message);\\n callbacksBuilder.textOutputCallback(messageType, message);\\n}\\n\\nfunction validatedPasswordCallback() {\\n var prompt = getString(properties.options.prompt);\\n var echoOn = getBoolean(properties.options.echoOn);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedPasswordCallback(prompt, echoOn, policies, validateOnly);\\n }\\n}\\n\\nfunction validatedUsernameCallback() {\\n var prompt = getString(properties.options.prompt);\\n var policies = getObject(properties.options.policies);\\n var validateOnly = getBoolean(properties.options.validateOnly);\\n var failedPolicies = getArray(properties.options.failedPolicies);\\n if (isArrayPresent(properties.options.failedPolicies)) {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly, failedPolicies);\\n } else {\\n callbacksBuilder.validatedUsernameCallback(prompt, policies, validateOnly);\\n }\\n}\\n\\nfunction x509CertificateCallback() {\\n throw new Error('Not Implemented');\\n}\\n\\nfunction getBooleanAttributeInputCallback() {\\n setProperty(callbacks.getBooleanAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getChoiceCallback() {\\n var multipleSelectionsAllowed = getBoolean(properties.options.multipleSelectionsAllowed);\\n var selections = callbacks.getChoiceCallbacks().get(0);\\n setProperty(multipleSelectionsAllowed ? selections : selections[0]);\\n}\\n\\nfunction getConfirmationCallback() {\\n setProperty(callbacks.getConfirmationCallbacks().get(0));\\n}\\n\\nfunction getConsentMappingCallback() {\\n setProperty(callbacks.getConsentMappingCallbacks().get(0));\\n}\\n\\nfunction getDeviceProfileCallback() {\\n setProperty(callbacks.getDeviceProfileCallbacks().get(0));\\n}\\n\\nfunction getHiddenValueCallback() {\\n var id = getString(properties.options.id);\\n setProperty(callbacks.getHiddenValueCallbacks().get(id));\\n}\\n\\nfunction getHttpCallback() {\\n setProperty(callbacks.getHttpCallbacks().get(0));\\n}\\n\\nfunction getIdPCallback() {\\n setProperty(callbacks.getIdpCallbacks().get(0));\\n}\\n\\nfunction getKbaCreateCallback() {\\n setProperty(callbacks.getKbaCreateCallbacks().get(0));\\n}\\n\\nfunction getLanguageCallback() {\\n setProperty(callbacks.getLanguageCallbacks().get(0));\\n}\\n\\nfunction getNameCallback() {\\n setProperty(callbacks.getNameCallbacks().get(0));\\n}\\n\\nfunction getNumberAttributeInputCallback() {\\n setProperty(callbacks.getNumberAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getPasswordCallback() {\\n setProperty(callbacks.getPasswordCallbacks().get(0));\\n}\\n\\nfunction getSelectIdPCallback() {\\n setProperty(callbacks.getSelectIdPCallbacks().get(0));\\n}\\n\\nfunction getStringAttributeInputCallback() {\\n setProperty(callbacks.getStringAttributeInputCallbacks().get(0));\\n}\\n\\nfunction getTermsAndConditionsCallback() {\\n setProperty(callbacks.getTermsAndConditionsCallbacks().get(0));\\n}\\n\\nfunction getTextInputCallback() {\\n setProperty(callbacks.getTextInputCallbacks().get(0));\\n}\\n\\nfunction getValidatedPasswordCallback() {\\n setProperty(callbacks.getValidatedPasswordCallbacks().get(0));\\n}\\n\\nfunction getValidatedUsernameCallback() {\\n setProperty(callbacks.getValidatedUsernameCallbacks().get(0));\\n}\\n\\nfunction getX509CertificateCallback() {\\n setProperty(callbacks.getX509CertificateCallbacks().get(0));\\n}\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: getBooleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: getChoiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: getConfirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: getConsentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: getDeviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: getHiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: getHttpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: getIdPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: getKbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: getLanguageCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: getNameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: getNumberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: getPasswordCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: getSelectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: getStringAttributeInputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: getTermsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: getTextInputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: getValidatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: getValidatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: getX509CertificateCallback(); break;\\n default: break;\\n }\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n\\n switch (properties.callback) {\\n case CALLBACKS.BOOLEAN_ATTRIBUTE_INPUT_CALLBACK: booleanAttributeInputCallback(); break;\\n case CALLBACKS.CHOICE_CALLBACK: choiceCallback(); break;\\n case CALLBACKS.CONFIRMATION_CALLBACK: confirmationCallback(); break;\\n case CALLBACKS.CONSENT_MAPPING_CALLBACK: consentMappingCallback(); break;\\n case CALLBACKS.DEVICE_PROFILE_CALLBACK: deviceProfileCallback(); break;\\n case CALLBACKS.HIDDEN_VALUE_CALLBACK: hiddenValueCallback(); break;\\n case CALLBACKS.HTTP_CALLBACK: httpCallback(); break;\\n case CALLBACKS.IDP_CALLBACK: idPCallback(); break;\\n case CALLBACKS.KBA_CREATE_CALLBACK: kbaCreateCallback(); break;\\n case CALLBACKS.LANGUAGE_CALLBACK: languageCallback(); break;\\n case CALLBACKS.METADATA_CALLBACK: metadataCallback(); break;\\n case CALLBACKS.NAME_CALLBACK: nameCallback(); break;\\n case CALLBACKS.NUMBER_ATTRIBUTE_INPUT_CALLBACK: numberAttributeInputCallback(); break;\\n case CALLBACKS.PASSWORD_CALLBACK: passwordCallback(); break;\\n case CALLBACKS.POLLING_WAIT_CALLBACK: pollingWaitCallback(); break;\\n case CALLBACKS.REDIRECT_CALLBACK: redirectCallback(); break;\\n case CALLBACKS.SCRIPT_TEXT_OUTPUT_CALLBACK: scriptTextOutputCallback(); break;\\n case CALLBACKS.SELECT_IDP_CALLBACK: selectIdPCallback(); break;\\n case CALLBACKS.STRING_ATTRIBUTE_INPUT_CALLBACK: stringAttributeInputCallback(); break;\\n case CALLBACKS.SUSPENDED_TEXT_OUTPUT_CALLBACK: suspendedTextOutputCallback(); break;\\n case CALLBACKS.TERMS_AND_CONDITIONS_CALLBACK: termsAndConditionsCallback(); break;\\n case CALLBACKS.TEXT_INPUT_CALLBACK: textInputCallback(); break;\\n case CALLBACKS.TEXT_OUTPUT_CALLBACK: textOutputCallback(); break;\\n case CALLBACKS.VALIDATED_PASSWORD_CALLBACK: validatedPasswordCallback(); break;\\n case CALLBACKS.VALIDATED_USERNAME_CALLBACK: validatedUsernameCallback(); break;\\n case CALLBACKS.X509_CERTIFICATE_CALLBACK: x509CertificateCallback(); break;\\n default: throw new Error('Unknown Callback'); // Should never reach this case\\n }\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"callback\",\"utilities\"],\"properties\":{\"callback\":{\"title\":\"Callback\",\"description\":\"The callback to display\",\"type\":\"STRING\",\"required\":true,\"options\":{\"METADATA_CALLBACK\":\"metadataCallback\",\"TERMS_AND_CONDITIONS_CALLBACK\":\"termsAndConditionsCallback\",\"NUMBER_ATTRIBUTE_INPUT_CALLBACK\":\"numberAttributeInputCallback\",\"TEXT_OUTPUT_CALLBACK\":\"textOutputCallback\",\"SCRIPT_TEXT_OUTPUT_CALLBACK\":\"scriptTextOutputCallback\",\"CONSENT_MAPPING_CALLBACK\":\"consentMappingCallback\",\"STRING_ATTRIBUTE_INPUT_CALLBACK\":\"stringAttributeInputCallback\",\"IDP_CALLBACK\":\"idPCallback\",\"VALIDATED_PASSWORD_CALLBACK\":\"validatedPasswordCallback\",\"SELECT_IDP_CALLBACK\":\"selectIdPCallback\",\"POLLING_WAIT_CALLBACK\":\"pollingWaitCallback\",\"NAME_CALLBACK\":\"nameCallback\",\"SUSPENDED_TEXT_OUTPUT_CALLBACK\":\"suspendedTextOutputCallback\",\"REDIRECT_CALLBACK\":\"redirectCallback\",\"X509_CERTIFICATE_CALLBACK\":\"x509CertificateCallback\",\"PASSWORD_CALLBACK\":\"passwordCallback\",\"TEXT_INPUT_CALLBACK\":\"textInputCallback\",\"BOOLEAN_ATTRIBUTE_INPUT_CALLBACK\":\"booleanAttributeInputCallback\",\"CONFIRMATION_CALLBACK\":\"confirmationCallback\",\"CHOICE_CALLBACK\":\"choiceCallback\",\"DEVICE_PROFILE_CALLBACK\":\"deviceProfileCallback\",\"HIDDEN_VALUE_CALLBACK\":\"hiddenValueCallback\",\"HTTP_CALLBACK\":\"httpCallback\",\"VALIDATED_USERNAME_CALLBACK\":\"validatedUsernameCallback\",\"KBA_CREATE_CALLBACK\":\"kbaCreateCallback\",\"LANGUAGE_CALLBACK\":\"languageCallback\"},\"multivalued\":false},\"objectSharedProperty\":{\"title\":\"Object Attributes Shared Property\",\"description\":\"The objectAttributes property on the shared state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"objectTransientProperty\":{\"title\":\"Object Attributes Transient Property\",\"description\":\"The objectAttributes property on the transient state to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"options\":{\"title\":\"Options\",\"description\":\"The options containing the parameters for the callback (see documentation for possible parameters: https://docs.pingidentity.com/pingoneaic/latest/am-scripting/scripting-api-node.html#scripting-api-node-callbacks). \\n\\nFor example, for textOutputCallback, the options could be: { messageType: 0, message: \\\"Hello World!\\\" }. \\n\\nNote that for required parameters that are not specified in the options will use default values based on the type of the parameter (\\\"\\\" for Strings, [] for Arrays, {} for Objects, 0 for Ints, 0.0 for Doubles, and false for Booleans).\",\"type\":\"OBJECT\",\"required\":true,\"multivalued\":false},\"sharedProperty\":{\"title\":\"Shared State Property\",\"description\":\"The shared state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false},\"transientProperty\":{\"title\":\"Transient State Property\",\"description\":\"The transient state property to put the callback input into (if applicable)\",\"type\":\"STRING\",\"required\":false,\"multivalued\":false}}},{\"_id\":\"c605506774a848f7877b4d17a453bd39-1\",\"_rev\":\"309311416\",\"serviceName\":\"c605506774a848f7877b4d17a453bd39\",\"displayName\":\"Has Session\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"session-1\",\"_rev\":\"705045404\",\"serviceName\":\"session\",\"displayName\":\"Has Session AM\",\"description\":\"Checks if the user has a current session.\",\"outcomes\":[\"True\",\"False\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n TRUE: 'True',\\n FALSE: 'False'\\n}\\n\\nfunction main() {\\n action.goTo(typeof existingSession === \\\"undefined\\\" ? SCRIPT_OUTCOMES.FALSE : SCRIPT_OUTCOMES.TRUE);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"utilities\"],\"properties\":{}},{\"_id\":\"8ab9f1aad4b4460a9c45d15fb148e221-1\",\"_rev\":\"-1749152606\",\"serviceName\":\"8ab9f1aad4b4460a9c45d15fb148e221\",\"displayName\":\"Display State\",\"description\":\"Debug node that displays the shared and transient state of the journey for debugging purposes.\",\"outcomes\":[\"outcome\"],\"outputs\":[],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n OUTCOME: \\\"outcome\\\"\\n};\\n\\nfunction main() {\\n if (!callbacks.isEmpty()) {\\n action.goTo(SCRIPT_OUTCOMES.OUTCOME);\\n return;\\n }\\n var keySet = nodeState.keys(); // Java Set\\n var keys = Array.from(keySet); // Make it into JavaScript array\\n debugState = {};\\n for (var i in keys) {\\n var k = new String(keys[i]);\\n var item = nodeState.get(k);\\n if (typeof item === \\\"object\\\") {\\n debugState[k] = nodeState.getObject(k);\\n } else {\\n debugState[k] = nodeState.get(k);\\n }\\n }\\n if (properties.displayFormat === \\\"JSON\\\") {\\n callbacksBuilder.textOutputCallback(0, `
${JSON.stringify(debugState, null, 2)}
`);\\n return;\\n }\\n callbacksBuilder.textOutputCallback(0, `${Array.from(Object.keys(debugState).map(k => ``))}
KeyValue
${k}
${debugState[k]}
`);\\n}\\n\\nmain();\\n\",\"errorOutcome\":false,\"tags\":[\"debug\",\"testing\"],\"properties\":{\"displayFormat\":{\"title\":\"Display Format\",\"description\":\"The format in which to display the states.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"TABLE\",\"options\":{\"TABLE\":\"HTML Table\",\"JSON\":\"Raw JSON\"},\"multivalued\":false}}},{\"_id\":\"c15e2efb3deb4d4ea338c74a6440b69f-1\",\"_rev\":\"957146401\",\"serviceName\":\"c15e2efb3deb4d4ea338c74a6440b69f\",\"displayName\":\"Vector ALU\",\"description\":\"Simple ALU that performs basic binary vector math operations. Outputs the result onto the shared state with key \\\"c\\\".\",\"outcomes\":[\"Success\"],\"outputs\":[\"c\"],\"inputs\":[],\"script\":\"var SCRIPT_OUTCOMES = {\\n SUCCESS: 'Success'\\n};\\n\\nvar OPERATORS = {\\n ADD: \\\"ADD\\\",\\n SUBTRACT: \\\"SUBTRACT\\\",\\n DOT: \\\"DOT\\\",\\n CROSS: \\\"CROSS\\\"\\n}\\n\\nfunction add(a, b) {\\n return a.map((v, i) => v + b[i]);\\n}\\n\\nfunction subtract(a, b) {\\n return a.map((v, i) => v - b[i]);\\n}\\n\\nfunction dot(a, b) {\\n return a.reduce((sum, v, i) => sum + v * b[i], 0);\\n}\\n\\nfunction cross(a, b) {\\n return [\\n a[1] * b[2] - a[2] * b[1],\\n a[2] * b[0] - a[0] * b[2],\\n a[0] * b[1] - a[1] * b[0]\\n ];\\n}\\n\\nfunction main() {\\n if (properties.a.length !== properties.b.length) throw new Error(\\\"Vectors not the same dimension.\\\");\\n switch (properties.operator) {\\n case OPERATORS.ADD:\\n nodeState.putShared(\\\"c\\\", add(properties.a, properties.b));\\n break;\\n case OPERATORS.SUBTRACT:\\n nodeState.putShared(\\\"c\\\", subtract(properties.a, properties.b));\\n break;\\n case OPERATORS.DOT:\\n nodeState.putShared(\\\"c\\\", dot(properties.a, properties.b));\\n break;\\n case OPERATORS.CROSS:\\n if (properties.a.length !== 3) throw new Error(\\\"Vectors not dimension 3 for cross product\\\");\\n nodeState.putShared(\\\"c\\\", cross(properties.a, properties.b));\\n break;\\n default: throw new Error(\\\"Unknown operator.\\\");\\n }\\n action.goTo(SCRIPT_OUTCOMES.SUCCESS);\\n}\\n\\nmain();\\n\",\"errorOutcome\":true,\"tags\":[\"math\",\"vector\",\"utilities\"],\"properties\":{\"a\":{\"title\":\"A\",\"description\":\"Left vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[1,2,3],\"multivalued\":true},\"b\":{\"title\":\"B\",\"description\":\"Right vector operand\",\"type\":\"NUMBER\",\"required\":true,\"defaultValue\":[4,5,6],\"multivalued\":true},\"operator\":{\"title\":\"Operator\",\"description\":\"The binary operation to perform on the vectors.\",\"type\":\"STRING\",\"required\":true,\"defaultValue\":\"DOT\",\"options\":{\"ADD\":\"+\",\"CROSS\":\"X\",\"DOT\":\".\",\"SUBTRACT\":\"-\"},\"multivalued\":false}}}],\"resultCount\":7,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"EXACT\",\"totalPagedResults\":7,\"remainingPagedResults\":-1}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "protocol=2.1,resource=1.0, resource=1.0" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "date", + "value": "Thu, 18 Dec 2025 17:45:37 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-5cd89e3d-c0a3-43bf-806c-78cd1992aea4" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + }, + { + "name": "transfer-encoding", + "value": "chunked" + } + ], + "headersSize": 690, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2025-12-18T17:45:37.288Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, { "_id": "ccd7a5defd0fdeaa986a2b54642d911a", "_order": 0, diff --git a/test/e2e/node-delete.e2e.test.js b/test/e2e/node-delete.e2e.test.js new file mode 100644 index 000000000..486a0f248 --- /dev/null +++ b/test/e2e/node-delete.e2e.test.js @@ -0,0 +1,119 @@ +/** + * Follow this process to write e2e tests for the CLI project: + * + * 1. Test if all the necessary mocks for your tests already exist. + * In mock mode, run the command you want to test with the same arguments + * and parameters exactly as you want to test it, for example: + * + * $ FRODO_MOCK=1 frodo conn save https://openam-frodo-dev.forgeblocks.com/am volker.scheuber@forgerock.com Sup3rS3cr3t! + * + * If your command completes without errors and with the expected results, + * all the required mocks already exist and you are good to write your + * test and skip to step #4. + * + * If, however, your command fails and you see errors like the one below, + * you know you need to record the mock responses first: + * + * [Polly] [adapter:node-http] Recording for the following request is not found and `recordIfMissing` is `false`. + * + * 2. Record mock responses for your exact command. + * In mock record mode, run the command you want to test with the same arguments + * and parameters exactly as you want to test it, for example: + * + * $ FRODO_MOCK=record frodo conn save https://openam-frodo-dev.forgeblocks.com/am volker.scheuber@forgerock.com Sup3rS3cr3t! + * + * Wait until you see all the Polly instances (mock recording adapters) have + * shutdown before you try to run step #1 again. + * Messages like these indicate mock recording adapters shutting down: + * + * Polly instance 'conn/4' stopping in 3s... + * Polly instance 'conn/4' stopping in 2s... + * Polly instance 'conn/save/3' stopping in 3s... + * Polly instance 'conn/4' stopping in 1s... + * Polly instance 'conn/save/3' stopping in 2s... + * Polly instance 'conn/4' stopped. + * Polly instance 'conn/save/3' stopping in 1s... + * Polly instance 'conn/save/3' stopped. + * + * 3. Validate your freshly recorded mock responses are complete and working. + * Re-run the exact command you want to test in mock mode (see step #1). + * + * 4. Write your test. + * Make sure to use the exact command including number of arguments and params. + * + * 5. Commit both your test and your new recordings to the repository. + * Your tests are likely going to reside outside the frodo-lib project but + * the recordings must be committed to the frodo-lib project. + */ + +/* +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node delete -n 'Generate JWT' +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node delete --node-name 'Unknown' +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node delete -i e5ad0110c8ee4dafaae983003cd05d4a +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node delete --node-id c605506774a848f7877b4d17a453bd39-1 +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node delete -a +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node delete --all +*/ +import cp from 'child_process'; +import { promisify } from 'util'; +import { getEnv, removeAnsiEscapeCodes } from './utils/TestUtils'; +import { connection as c } from './utils/TestConfig'; + +const exec = promisify(cp.exec); + +process.env['FRODO_MOCK'] = '1'; +const env = getEnv(c); + +describe('frodo node delete', () => { + test("\"frodo node delete -n 'Generate JWT'\": should delete the custom node named 'Generate JWT'", async () => { + const CMD = `frodo node delete -n 'Generate JWT'`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test("\"frodo node delete --node-name 'Unknown'\": should display error when the custom node named 'Unknown' cannot be deleted since it doesn't exist", async () => { + const CMD = `frodo node delete --node-name 'Unknown'`; + try { + await exec(CMD, env); + throw new Error("Command should've failed"); + } catch (e) { + expect(removeAnsiEscapeCodes(e.stderr)).toMatchSnapshot(); + } + }); + + test('"frodo node delete -i e5ad0110c8ee4dafaae983003cd05d4a": should delete the custom node with service name \'e5ad0110c8ee4dafaae983003cd05d4a\'', async () => { + const CMD = `frodo node delete -i e5ad0110c8ee4dafaae983003cd05d4a`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test('"frodo node delete --node-id c605506774a848f7877b4d17a453bd39-1": should display error when the custom node with id \'c605506774a848f7877b4d17a453bd39-1\' cannot be deleted since it is being used', async () => { + const CMD = `frodo node delete --node-id c605506774a848f7877b4d17a453bd39-1`; + try { + await exec(CMD, env); + throw new Error("Command should've failed"); + } catch (e) { + expect(removeAnsiEscapeCodes(e.stderr)).toMatchSnapshot(); + } + }); + + test('"frodo node delete -a": should delete all nodes that are not being used', async () => { + const CMD = `frodo node delete -a`; + try { + await exec(CMD, env); + throw new Error("Command should've failed"); + } catch (e) { + expect(removeAnsiEscapeCodes(e.stderr)).toMatchSnapshot(); + } + }); + + test('"frodo node delete --all": should not delete any nodes if they are all in use', async () => { + const CMD = `frodo node delete --all`; + try { + await exec(CMD, env); + throw new Error("Command should've failed"); + } catch (e) { + expect(removeAnsiEscapeCodes(e.stderr)).toMatchSnapshot(); + } + }); +}); diff --git a/test/e2e/node-describe.e2e.test.js b/test/e2e/node-describe.e2e.test.js new file mode 100644 index 000000000..842b830b5 --- /dev/null +++ b/test/e2e/node-describe.e2e.test.js @@ -0,0 +1,100 @@ +/** + * Follow this process to write e2e tests for the CLI project: + * + * 1. Test if all the necessary mocks for your tests already exist. + * In mock mode, run the command you want to test with the same arguments + * and parameters exactly as you want to test it, for example: + * + * $ FRODO_MOCK=1 frodo conn save https://openam-frodo-dev.forgeblocks.com/am volker.scheuber@forgerock.com Sup3rS3cr3t! + * + * If your command completes without errors and with the expected results, + * all the required mocks already exist and you are good to write your + * test and skip to step #4. + * + * If, however, your command fails and you see errors like the one below, + * you know you need to record the mock responses first: + * + * [Polly] [adapter:node-http] Recording for the following request is not found and `recordIfMissing` is `false`. + * + * 2. Record mock responses for your exact command. + * In mock record mode, run the command you want to test with the same arguments + * and parameters exactly as you want to test it, for example: + * + * $ FRODO_MOCK=record frodo conn save https://openam-frodo-dev.forgeblocks.com/am volker.scheuber@forgerock.com Sup3rS3cr3t! + * + * Wait until you see all the Polly instances (mock recording adapters) have + * shutdown before you try to run step #1 again. + * Messages like these indicate mock recording adapters shutting down: + * + * Polly instance 'conn/4' stopping in 3s... + * Polly instance 'conn/4' stopping in 2s... + * Polly instance 'conn/save/3' stopping in 3s... + * Polly instance 'conn/4' stopping in 1s... + * Polly instance 'conn/save/3' stopping in 2s... + * Polly instance 'conn/4' stopped. + * Polly instance 'conn/save/3' stopping in 1s... + * Polly instance 'conn/save/3' stopped. + * + * 3. Validate your freshly recorded mock responses are complete and working. + * Re-run the exact command you want to test in mock mode (see step #1). + * + * 4. Write your test. + * Make sure to use the exact command including number of arguments and params. + * + * 5. Commit both your test and your new recordings to the repository. + * Your tests are likely going to reside outside the frodo-lib project but + * the recordings must be committed to the frodo-lib project. + */ + +/* +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node describe -i c605506774a848f7877b4d17a453bd39 +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node describe -n 'Display Callback' +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node describe --node-name 'Unknown' +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node describe --json --node-id c605506774a848f7877b4d17a453bd39-1 +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node describe --json --node-name 'Display Callback' +*/ +import cp from 'child_process'; +import { promisify } from 'util'; +import { getEnv, removeAnsiEscapeCodes, removeProgressBarOutput } from './utils/TestUtils'; +import { connection as c } from './utils/TestConfig'; + +const exec = promisify(cp.exec); + +process.env['FRODO_MOCK'] = '1'; +const env = getEnv(c); + +describe('frodo node describe', () => { + test(`"frodo node describe -i c605506774a848f7877b4d17a453bd39": should describe the custom node with service name "c605506774a848f7877b4d17a453bd39"`, async () => { + const CMD = `frodo node describe -i c605506774a848f7877b4d17a453bd39`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test(`"frodo node describe -n 'Display Callback'": should describe the custom node with display name "Display Callback"`, async () => { + const CMD = `frodo node describe -n 'Display Callback'`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test(`"frodo node describe --node-name 'Unknown'": should fail to describe the non-existent custom node with name "Unknown"`, async () => { + const CMD = `frodo node describe --node-name 'Unknown'`; + try { + await exec(CMD, env); + fail("Command should've failed") + } catch (e) { + expect(removeProgressBarOutput(removeAnsiEscapeCodes(e.stderr))).toMatchSnapshot(); + } + }); + + test(`"frodo node describe --json --node-id c605506774a848f7877b4d17a453bd39-1": should describe the custom node with id "c605506774a848f7877b4d17a453bd39-1" with json output`, async () => { + const CMD = `frodo node describe --json --node-id c605506774a848f7877b4d17a453bd39-1`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test(`"frodo node describe --json --node-name 'Display Callback'": should describe the custom node with name "Display Callback" with json output`, async () => { + const CMD = `frodo node describe --json --node-name 'Display Callback'`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); +}); diff --git a/test/e2e/node-export.e2e.test.js b/test/e2e/node-export.e2e.test.js new file mode 100644 index 000000000..4230b45d4 --- /dev/null +++ b/test/e2e/node-export.e2e.test.js @@ -0,0 +1,118 @@ +/** + * Follow this process to write e2e tests for the CLI project: + * + * 1. Test if all the necessary mocks for your tests already exist. + * In mock mode, run the command you want to test with the same arguments + * and parameters exactly as you want to test it, for example: + * + * $ FRODO_MOCK=1 frodo conn save https://openam-frodo-dev.forgeblocks.com/am volker.scheuber@forgerock.com Sup3rS3cr3t! + * + * If your command completes without errors and with the expected results, + * all the required mocks already exist and you are good to write your + * test and skip to step #4. + * + * If, however, your command fails and you see errors like the one below, + * you know you need to record the mock responses first: + * + * [Polly] [adapter:node-http] Recording for the following request is not found and `recordIfMissing` is `false`. + * + * 2. Record mock responses for your exact command. + * In mock record mode, run the command you want to test with the same arguments + * and parameters exactly as you want to test it, for example: + * + * $ FRODO_MOCK=record frodo conn save https://openam-frodo-dev.forgeblocks.com/am volker.scheuber@forgerock.com Sup3rS3cr3t! + * + * Wait until you see all the Polly instances (mock recording adapters) have + * shutdown before you try to run step #1 again. + * Messages like these indicate mock recording adapters shutting down: + * + * Polly instance 'conn/4' stopping in 3s... + * Polly instance 'conn/4' stopping in 2s... + * Polly instance 'conn/save/3' stopping in 3s... + * Polly instance 'conn/4' stopping in 1s... + * Polly instance 'conn/save/3' stopping in 2s... + * Polly instance 'conn/4' stopped. + * Polly instance 'conn/save/3' stopping in 1s... + * Polly instance 'conn/save/3' stopped. + * + * 3. Validate your freshly recorded mock responses are complete and working. + * Re-run the exact command you want to test in mock mode (see step #1). + * + * 4. Write your test. + * Make sure to use the exact command including number of arguments and params. + * + * 5. Commit both your test and your new recordings to the repository. + * Your tests are likely going to reside outside the frodo-lib project but + * the recordings must be committed to the frodo-lib project. + */ + +/* +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node export -Nxi c605506774a848f7877b4d17a453bd39 -D customNodeExportDir1 +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node export --node-id c605506774a848f7877b4d17a453bd39-1 +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node export -xn 'Display Callback' -D customNodeExportDir2 +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node export --node-name 'Display Callback' +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node export -a +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node export --all --no-metadata --file customNodeTest1.json --directory customNodeExportDir3 +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node export -AND customNodeExportDir4 +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node export --all-separate --extract --directory customNodeExportDir5 +*/ +import { getEnv, testExport } from './utils/TestUtils'; +import { connection as c } from './utils/TestConfig'; + +process.env['FRODO_MOCK'] = '1'; +const env = getEnv(c); + +const type = 'nodeTypes'; + +describe('frodo node export', () => { + test('"frodo node export -Nxi c605506774a848f7877b4d17a453bd39 -D customNodeExportDir1": should export custom node with service name "c605506774a848f7877b4d17a453bd39" to directory customNodeExportDir1 with no metadata and extracted script', async () => { + const exportFile = "c605506774a848f7877b4d17a453bd39.nodeTypes.json"; + const exportDirectory = "customNodeExportDir1"; + const CMD = `frodo node export -Nxi c605506774a848f7877b4d17a453bd39 -D ${exportDirectory}`; + await testExport(CMD, env, type, exportFile, exportDirectory, false); + }); + + test('"frodo node export --node-id c605506774a848f7877b4d17a453bd39-1": should export the custom node with id "c605506774a848f7877b4d17a453bd39-1"', async () => { + const exportFile = 'c605506774a848f7877b4d17a453bd39-1.nodeTypes.json'; + const CMD = `frodo node export --node-id c605506774a848f7877b4d17a453bd39-1`; + await testExport(CMD, env, type, exportFile); + }); + + test('"frodo node export -xn \'Display Callback\' -D customNodeExportDir2": should export the custom node with display name "Display Callback" to the directory customNodeExportDir2 with extracted script', async () => { + const exportFile = "Display-Callback.nodeTypes.json"; + const exportDirectory = 'customNodeExportDir2'; + const CMD = `frodo node export -xn 'Display Callback' -D ${exportDirectory}`; + await testExport(CMD, env, type, exportFile, exportDirectory); + }); + + test('"frodo node export --node-name \'Display Callback\'": should export the custom node with display name "DisplayCallback"', async () => { + const exportFile = 'Display-Callback.nodeTypes.json'; + const CMD = `frodo node export --node-name 'Display Callback'`; + await testExport(CMD, env, type, exportFile); + }); + + test('"frodo node export -a": should export all custom nodes to a single file', async () => { + const exportFile = 'allCustomNodes.nodeTypes.json'; + const CMD = `frodo node export -a`; + await testExport(CMD, env, type, exportFile); + }); + + test('"frodo node export --all --no-metadata --file customNodeTest1.json --directory customNodeExportDir3": should export all nodes to a single file named customNodeTest1.json in the directory customNodeExportDir3 with no metadata', async () => { + const exportFile = 'customNodeTest1.json'; + const exportDirectory = 'customNodeExportDir3'; + const CMD = `frodo node export --all --no-metadata --file ${exportFile} --directory ${exportDirectory}`; + await testExport(CMD, env, type, exportFile, exportDirectory, false); + }); + + test('"frodo node export -AND customNodeExportDir4": should export all nodes into separate files with no metadata in the directory customNodeExportDir4', async () => { + const exportDirectory = 'customNodeExportDir4'; + const CMD = `frodo node export -AND ${exportDirectory}`; + await testExport(CMD, env, type, undefined, exportDirectory, false); + }); + + test('"frodo node export --all-separate --extract --directory customNodeExportDir5": should export all nodes with extracted scripts into separate files in the directory customNodeExportDir5', async () => { + const exportDirectory = 'customNodeExportDir5'; + const CMD = `frodo node export --all-separate --extract --directory ${exportDirectory}`; + await testExport(CMD, env, type, undefined, exportDirectory); + }); +}); diff --git a/test/e2e/node-import.e2e.test.js b/test/e2e/node-import.e2e.test.js new file mode 100644 index 000000000..c60bd81ff --- /dev/null +++ b/test/e2e/node-import.e2e.test.js @@ -0,0 +1,129 @@ +/** + * Follow this process to write e2e tests for the CLI project: + * + * 1. Test if all the necessary mocks for your tests already exist. + * In mock mode, run the command you want to test with the same arguments + * and parameters exactly as you want to test it, for example: + * + * $ FRODO_MOCK=1 frodo conn save https://openam-frodo-dev.forgeblocks.com/am volker.scheuber@forgerock.com Sup3rS3cr3t! + * + * If your command completes without errors and with the expected results, + * all the required mocks already exist and you are good to write your + * test and skip to step #4. + * + * If, however, your command fails and you see errors like the one below, + * you know you need to record the mock responses first: + * + * [Polly] [adapter:node-http] Recording for the following request is not found and `recordIfMissing` is `false`. + * + * 2. Record mock responses for your exact command. + * In mock record mode, run the command you want to test with the same arguments + * and parameters exactly as you want to test it, for example: + * + * $ FRODO_MOCK=record frodo conn save https://openam-frodo-dev.forgeblocks.com/am volker.scheuber@forgerock.com Sup3rS3cr3t! + * + * Wait until you see all the Polly instances (mock recording adapters) have + * shutdown before you try to run step #1 again. + * Messages like these indicate mock recording adapters shutting down: + * + * Polly instance 'conn/4' stopping in 3s... + * Polly instance 'conn/4' stopping in 2s... + * Polly instance 'conn/save/3' stopping in 3s... + * Polly instance 'conn/4' stopping in 1s... + * Polly instance 'conn/save/3' stopping in 2s... + * Polly instance 'conn/4' stopped. + * Polly instance 'conn/save/3' stopping in 1s... + * Polly instance 'conn/save/3' stopped. + * + * 3. Validate your freshly recorded mock responses are complete and working. + * Re-run the exact command you want to test in mock mode (see step #1). + * + * 4. Write your test. + * Make sure to use the exact command including number of arguments and params. + * + * 5. Commit both your test and your new recordings to the repository. + * Your tests are likely going to reside outside the frodo-lib project but + * the recordings must be committed to the frodo-lib project. + */ + +/* +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node import -i c605506774a848f7877b4d17a453bd39 -f test/e2e/exports/all/allCustomNodes.nodeTypes.json +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node import --node-id c605506774a848f7877b4d17a453bd39-1 --file allCustomNodes.nodeTypes.json --directory test/e2e/exports/all +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node import -n 'Display Callback' -f allCustomNodes.nodeTypes.json -D test/e2e/exports/all +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node import --node-name 'Display Callback' --file test/e2e/exports/all/allCustomNodes.nodeTypes.json +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node import -f test/e2e/exports/all/allCustomNodes.nodeTypes.json +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node import -af allCustomNodes.nodeTypes.json -D test/e2e/exports/all +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node import --all --file test/e2e/exports/all/allCustomNodes.nodeTypes.json +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node import -AD test/e2e/exports/all-separate/cloud/global/nodeTypes +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node import --all-separate --directory test/e2e/exports/all-separate/cloud/global/nodeTypes +*/ +import cp from 'child_process'; +import { promisify } from 'util'; +import { getEnv, removeAnsiEscapeCodes } from './utils/TestUtils'; +import { connection as c } from './utils/TestConfig'; + +const exec = promisify(cp.exec); + +process.env['FRODO_MOCK'] = '1'; +const env = getEnv(c); + +const allDirectory = "test/e2e/exports/all"; +const allNodesFileName = "allCustomNodes.nodeTypes.json"; +const allNodesExport = `${allDirectory}/${allNodesFileName}`; +const allSeparateNodesDirectory = `test/e2e/exports/all-separate/cloud/global/nodeTypes`; + +describe('frodo node import', () => { + test(`"frodo node import -i c605506774a848f7877b4d17a453bd39 -f ${allNodesExport}": should import the custom node with the service name "c605506774a848f7877b4d17a453bd39" from the file "${allNodesExport}"`, async () => { + const CMD = `frodo node import -i c605506774a848f7877b4d17a453bd39 -f ${allNodesExport}`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test(`"frodo node import --node-id c605506774a848f7877b4d17a453bd39-1 --file ${allNodesFileName} --directory ${allDirectory}": should import the custom node with the id "c605506774a848f7877b4d17a453bd39-1" from the file "${allNodesExport}"`, async () => { + const CMD = `frodo node import --node-id c605506774a848f7877b4d17a453bd39-1 --file ${allNodesFileName} --directory ${allDirectory}`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test(`"frodo node import -n 'Display Callback' -f ${allNodesFileName} -D ${allDirectory}": should import the custom node named "Display Callback" from the file ${allNodesExport}`, async () => { + const CMD = `frodo node import -n 'Display Callback' -f ${allNodesFileName} -D ${allDirectory}`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test(`"frodo node import --node-name 'Display Callback' --file ${allNodesExport}": should import the custom node named "Display Callback" from the file "${allNodesExport}"`, async () => { + const CMD = `frodo node import --node-name 'Display Callback' --file ${allNodesExport}`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test(`"frodo node import -f ${allNodesExport}": should import the first custom node from the file "${allNodesExport}"`, async () => { + const CMD = `frodo node import -f ${allNodesExport}`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test(`"frodo node import -af ${allNodesFileName} -D ${allDirectory}": should import all custom nodes from the file "${allNodesExport}"`, async () => { + const CMD = `frodo node import -af ${allNodesFileName} -D ${allDirectory}`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test(`"frodo node import --all --file ${allNodesExport}": should import all custom nodes from the file "${allNodesExport}"`, async () => { + const CMD = `frodo node import --all --file ${allNodesExport}`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test(`"frodo node import -AD ${allSeparateNodesDirectory}": should import all custom nodes from the ${allSeparateNodesDirectory} directory"`, async () => { + const CMD = `frodo node import -AD ${allSeparateNodesDirectory}`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test(`"frodo node import --all-separate --directory ${allSeparateNodesDirectory}": should import all custom nodes from the ${allSeparateNodesDirectory} directory"`, async () => { + const CMD = `frodo node import --all-separate --directory ${allSeparateNodesDirectory}`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); +}); diff --git a/test/e2e/node-list.e2e.test.js b/test/e2e/node-list.e2e.test.js new file mode 100644 index 000000000..c514eefa5 --- /dev/null +++ b/test/e2e/node-list.e2e.test.js @@ -0,0 +1,82 @@ +/** + * Follow this process to write e2e tests for the CLI project: + * + * 1. Test if all the necessary mocks for your tests already exist. + * In mock mode, run the command you want to test with the same arguments + * and parameters exactly as you want to test it, for example: + * + * $ FRODO_MOCK=1 frodo conn save https://openam-frodo-dev.forgeblocks.com/am volker.scheuber@forgerock.com Sup3rS3cr3t! + * + * If your command completes without errors and with the expected results, + * all the required mocks already exist and you are good to write your + * test and skip to step #4. + * + * If, however, your command fails and you see errors like the one below, + * you know you need to record the mock responses first: + * + * [Polly] [adapter:node-http] Recording for the following request is not found and `recordIfMissing` is `false`. + * + * 2. Record mock responses for your exact command. + * In mock record mode, run the command you want to test with the same arguments + * and parameters exactly as you want to test it, for example: + * + * $ FRODO_MOCK=record frodo conn save https://openam-frodo-dev.forgeblocks.com/am volker.scheuber@forgerock.com Sup3rS3cr3t! + * + * Wait until you see all the Polly instances (mock recording adapters) have + * shutdown before you try to run step #1 again. + * Messages like these indicate mock recording adapters shutting down: + * + * Polly instance 'conn/4' stopping in 3s... + * Polly instance 'conn/4' stopping in 2s... + * Polly instance 'conn/save/3' stopping in 3s... + * Polly instance 'conn/4' stopping in 1s... + * Polly instance 'conn/save/3' stopping in 2s... + * Polly instance 'conn/4' stopped. + * Polly instance 'conn/save/3' stopping in 1s... + * Polly instance 'conn/save/3' stopped. + * + * 3. Validate your freshly recorded mock responses are complete and working. + * Re-run the exact command you want to test in mock mode (see step #1). + * + * 4. Write your test. + * Make sure to use the exact command including number of arguments and params. + * + * 5. Commit both your test and your new recordings to the repository. + * Your tests are likely going to reside outside the frodo-lib project but + * the recordings must be committed to the frodo-lib project. + */ + +/* +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node list +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node list -l +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo node list --long + */ +import cp from 'child_process'; +import { promisify } from 'util'; +import { getEnv, removeAnsiEscapeCodes } from './utils/TestUtils'; +import { connection as c } from './utils/TestConfig'; + +const exec = promisify(cp.exec); + +process.env['FRODO_MOCK'] = '1'; +const env = getEnv(c); + +describe('frodo node list', () => { + test('"frodo node list": should list the names of the custom nodes', async () => { + const CMD = `frodo node list`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test('"frodo node list -l": should list the ids, names, descriptions, and usages of the custom nodes.', async () => { + const CMD = `frodo node list -l`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); + + test('"frodo node list --long": should list the ids, names, descriptions, and usages of the custom nodes.', async () => { + const CMD = `frodo node list --long`; + const { stdout } = await exec(CMD, env); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + }); +}); diff --git a/test/e2e/promote.e2e.test.js b/test/e2e/promote.e2e.test.js index 3bdf389e7..0172f72f6 100644 --- a/test/e2e/promote.e2e.test.js +++ b/test/e2e/promote.e2e.test.js @@ -66,6 +66,7 @@ FRODO_MOCK=record FRODO_TEST_NAME='sync' FRODO_NO_CACHE=1 FRODO_HOST=https://ope FRODO_MOCK=record FRODO_TEST_NAME='mapping' FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo promote -M ./test/e2e/exports/full-export-separate -E [put dir where you have the export] FRODO_MOCK=record FRODO_TEST_NAME='service' FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo promote -M ./test/e2e/exports/full-export-separate -E [put dir where you have the export] FRODO_MOCK=record FRODO_TEST_NAME='journeyPromoteNoPrompt' FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo promote --prune-no-prompt -M ./test/e2e/exports/full-export-separate -E [put dir where you have the export] +FRODO_MOCK=record FRODO_TEST_NAME='node' FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo promote -M ./test/e2e/exports/full-export-separate -E [put dir where you have the export] */ import { getEnv, testPromote } from './utils/TestUtils'; import { connection as c } from './utils/TestConfig'; @@ -202,4 +203,12 @@ describe('frodo promote -M ./test/e2e/exports/full-export-separate -E ./tmp/tmp- let referenceSubDirs = ["./realm/root-bravo/service", "./realm/root-alpha/service"] await testPromote(sourceDir, modifiedDir, referenceSubDirs, env, name) }); + + test.skip('"node frodo promote -M ./test/e2e/exports/full-export-separate -E ./tmp/tmp-*": this should run a promote on node changes', async () => { + let name = "node"; + env.env.FRODO_TEST_NAME = name + let modifiedDir = `./test/e2e/exports/promote/${name}`; + let referenceSubDirs = ["./global/nodeTypes"] + await testPromote(sourceDir, modifiedDir, referenceSubDirs, env, name) + }); }); \ No newline at end of file