From 262089689b062c6c9492e3b848a536d23aa5f3c7 Mon Sep 17 00:00:00 2001 From: Dallin Sevy Date: Wed, 18 Mar 2026 13:41:40 -0600 Subject: [PATCH 1/3] feat: Add config-manager push raw command --- .../config-manager-push-raw.ts | 88 +++ .../config-manager-push.ts | 3 +- src/configManagerOps/FrConfigRawOps.ts | 25 +- .../config-manager-push-raw.test.js.snap | 87 +++ .../en/config-manager-push-raw.test.js | 10 + .../config-manager-push-raw.e2e.test.js.snap | 5 + test/e2e/config-manager-push-raw.e2e.test.js | 74 ++ .../fr-config-manager/forgeops/raw.json | 3 + .../raw/openidm/config/authentication.json | 60 ++ .../am_1076162899/recording.har | 631 ++++++++++++++++++ .../oauth2_393036114/recording.har | 289 ++++++++ .../openidm_3290118515/recording.har | 167 +++++ 12 files changed, 1440 insertions(+), 2 deletions(-) create mode 100644 src/cli/config-manager/config-manager-push/config-manager-push-raw.ts create mode 100644 test/client_cli/en/__snapshots__/config-manager-push-raw.test.js.snap create mode 100644 test/client_cli/en/config-manager-push-raw.test.js create mode 100644 test/e2e/__snapshots__/config-manager-push-raw.e2e.test.js.snap create mode 100644 test/e2e/config-manager-push-raw.e2e.test.js create mode 100644 test/e2e/exports/fr-config-manager/forgeops/raw.json create mode 100644 test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config/authentication.json create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/am_1076162899/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/oauth2_393036114/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/openidm_3290118515/recording.har diff --git a/src/cli/config-manager/config-manager-push/config-manager-push-raw.ts b/src/cli/config-manager/config-manager-push/config-manager-push-raw.ts new file mode 100644 index 000000000..ca9a06004 --- /dev/null +++ b/src/cli/config-manager/config-manager-push/config-manager-push-raw.ts @@ -0,0 +1,88 @@ +import { frodo } from '@rockcarver/frodo-lib'; +import { Option } from 'commander'; + +import { configManagerImportRaw } from '../../../configManagerOps/FrConfigRawOps'; +import { getTokens } from '../../../ops/AuthenticateOps'; +import { printMessage } from '../../../utils/Console'; +import { FrodoCommand } from '../../FrodoCommand'; + +const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = + frodo.utils.constants; + +const deploymentTypes = [ + CLOUD_DEPLOYMENT_TYPE_KEY, + FORGEOPS_DEPLOYMENT_TYPE_KEY, +]; + +export default function setup() { + const program = new FrodoCommand( + 'frodo config-manager push raw', + [], + deploymentTypes + ); + + program + .description('Import raw configurations to the tenant.') + .addOption( + new Option( + '-f, --config-file ', + 'The file path of the service object config file. ' + ) + ) + .addHelpText( + 'after', + 'HELP MESSAGE:\n' + + 'Make sure to create an import config file: raw.json to run this command.\n' + + 'Example command: frodo config-manager pull raw -f raw.json -D ../testDir frodo-dev\n\n' + + `Config file example:\n` + + '------------ Example Oauth2 agents import config for oauth2-agents.json file -----------\n' + + '[\n' + + ' { "path": "/openidm/config/authentication" },\n' + + ' {\n' + + ' "path": "/am/json/realms/root/realms/alpha/realm-config/webhooks/test-webhook",\n' + + ' "overrides": { "url": "${TEST_WEBHOOK_URL}" },\n' + + ' "pushApiVersion": {\n' + + ' "protocol": "2.0",\n' + + ' "resource": "1.0"\n' + + ' }\n' + + ' },\n' + + ' {"path": "/environment/release"}\n' + + '] \n' + + '* -------------------------------------------------------------------------------------------- \n' + ) + .action(async (host, realm, user, password, options, command) => { + command.handleDefaultArgsAndOpts( + host, + realm, + user, + password, + options, + command + ); + + if (await getTokens(false, true, deploymentTypes)) { + const outcome: boolean = await configManagerImportRaw( + options.configFile + ); + + if (!outcome) { + printMessage( + `Failed to export one or more config files. ${options.verbose ? '' : 'Check --verbose for me details.'}` + ); + 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/config-manager/config-manager-push/config-manager-push.ts b/src/cli/config-manager/config-manager-push/config-manager-push.ts index cf423832d..a7ff271d8 100644 --- a/src/cli/config-manager/config-manager-push/config-manager-push.ts +++ b/src/cli/config-manager/config-manager-push/config-manager-push.ts @@ -15,6 +15,7 @@ import OrgPrivileges from './config-manager-push-org-privileges'; import PasswordPolicy from './config-manager-push-password-policy'; import Schedules from './config-manager-push-schedules'; import ServiceObjects from './config-manager-push-service-objects'; +import Raw from './config-manager-push-raw'; import TermsAndConditions from './config-manager-push-terms-and-conditions'; import Themes from './config-manager-push-themes'; import UiConfig from './config-manager-push-ui-config'; @@ -43,6 +44,6 @@ export default function setup() { program.addCommand(UiConfig().name('ui-config')); program.addCommand(Authentication().name('authentication')); program.addCommand(ConnectorDefinitions().name('connector-definitions')); - + program.addCommand(Raw().name('raw')); return program; } diff --git a/src/configManagerOps/FrConfigRawOps.ts b/src/configManagerOps/FrConfigRawOps.ts index 934cce819..98e5318c6 100644 --- a/src/configManagerOps/FrConfigRawOps.ts +++ b/src/configManagerOps/FrConfigRawOps.ts @@ -1,11 +1,12 @@ import { frodo } from '@rockcarver/frodo-lib'; import { IdObjectSkeletonInterface } from '@rockcarver/frodo-lib/types/api/ApiTypes'; +import fs from 'fs'; import { readFile } from 'fs/promises'; import { printError, verboseMessage } from '../utils/Console'; const { getFilePath, saveJsonToFile } = frodo.utils; -const { exportRawConfig } = frodo.rawConfig; +const { exportRawConfig, importRawConfig } = frodo.rawConfig; /** * Export every item from the list in the provided json file @@ -33,3 +34,25 @@ export async function configManagerExportRaw(file: string): Promise { return false; } } + +/** + * Import every item from the list in the provided json file + * @returns True if each file was successfully exported + */ +export async function configManagerImportRaw(file: string): Promise { + try { + const filePath = getFilePath(file); + const rawConfig = JSON.parse(fs.readFileSync(filePath, 'utf8')); + for (const { path } of rawConfig) { + const filePath = getFilePath(`raw${path}.json`); + + const data = JSON.parse(fs.readFileSync(filePath, 'utf-8')); + + await importRawConfig({ path }, data); + } + return true; + } catch (error) { + printError(error); + return false; + } +} diff --git a/test/client_cli/en/__snapshots__/config-manager-push-raw.test.js.snap b/test/client_cli/en/__snapshots__/config-manager-push-raw.test.js.snap new file mode 100644 index 000000000..ebaa1a914 --- /dev/null +++ b/test/client_cli/en/__snapshots__/config-manager-push-raw.test.js.snap @@ -0,0 +1,87 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CLI help interface for 'config-manager push raw' should be expected english 1`] = ` +"Usage: frodo config-manager push raw [options] [host] [realm] [username] [password] + +Import raw configurations to the tenant. + +Arguments: + host AM base URL, e.g.: https://cdk.iam.example.com/am. To use a connection profile, just specify a unique substring or alias. + 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. + -f, --config-file The file path of the service object config file. + --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) + --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. + --passphrase The passphrase for the Amster private key if it is encrypted. + --private-key File containing the private key for authenticating with Amster. Supported formats include PEM (both PKCS#1 and PKCS#8 variants), OpenSSH, DNSSEC, and JWK. + --retry Retry failed operations. Valid values for strategy: + everything: Retry all failed operations. + network: Retry only network-related failed operations. + nothing: Do not retry failed operations. + The selected retry strategy controls how the CLI handles failures. (choices: "nothing", "everything", "network", default: Do not retry failed operations.) + --sa-id Service account id. + --sa-jwk-file File containing the JSON Web Key (JWK) associated with the the service account. + --use-realm-prefix-on-managed-objects Set to true if you want to use the realm name as a prefix on managed object configuration, e.g. managed/alpha_user, managed/alpha_application or managed/bravo_organization. When false, the default behaviour of using managed/user etc. is retained. This option is ignored when the deployment type is "cloud". + --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_AMSTER_PASSPHRASE: Passphrase for the Amster private key if it is encrypted. Overridden by '--passphrase' option. + FRODO_AMSTER_PRIVATE_KEY: Amster private key. Overridden by '--private-key' option but takes the actual private key as a value (i.e. the file contents), not a file name. Supported formats include PEM (both PKCS#1 and PKCS#8 variants), OpenSSH, DNSSEC, and JWK. + 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. When using an Amster private key, specifies which journey to use for Amster authentication as opposed to the default 'amsterService' journey. + FRODO_AUTHENTICATION_HEADER_OVERRIDES: Map of headers: '{"host":"am.example.com:8081"}'. These headers are sent with all requests and can be used to override default behavior, for example to set a custom host header for Proxy Connect-protected PingOne Advanced Identity Cloud environments. + FRODO_CONFIGURATION_HEADER_OVERRIDES: Map of headers: '{"X-Configuration-Type":"mutable"}'. These headers are sent with all configuration requests and can be used to override default behavior, for example to set a custom configuration header for mutable PingOne Advanced Identity Cloud environments. + FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'. + FRODO_IGA: Set to "true" to enable IGA (Identity Governance) endpoints for cloud deployments, or "false" to disable them, overriding auto-detected value. + 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. + +HELP MESSAGE: +Make sure to create an import config file: raw.json to run this command. +Example command: frodo config-manager pull raw -f raw.json -D ../testDir frodo-dev + +Config file example: +------------ Example Oauth2 agents import config for oauth2-agents.json file ----------- +[ + { "path": "/openidm/config/authentication" }, + { + "path": "/am/json/realms/root/realms/alpha/realm-config/webhooks/test-webhook", + "overrides": { "url": "\${TEST_WEBHOOK_URL}" }, + "pushApiVersion": { + "protocol": "2.0", + "resource": "1.0" + } + }, + {"path": "/environment/release"} +] +* -------------------------------------------------------------------------------------------- + +" +`; diff --git a/test/client_cli/en/config-manager-push-raw.test.js b/test/client_cli/en/config-manager-push-raw.test.js new file mode 100644 index 000000000..37c849663 --- /dev/null +++ b/test/client_cli/en/config-manager-push-raw.test.js @@ -0,0 +1,10 @@ +import cp from 'child_process'; +import { promisify } from 'util'; + +const exec = promisify(cp.exec); +const CMD = 'frodo config-manager push raw --help'; +const { stdout } = await exec(CMD); + +test("CLI help interface for 'config-manager push raw' should be expected english", async () => { + expect(stdout).toMatchSnapshot(); +}); \ No newline at end of file diff --git a/test/e2e/__snapshots__/config-manager-push-raw.e2e.test.js.snap b/test/e2e/__snapshots__/config-manager-push-raw.e2e.test.js.snap new file mode 100644 index 000000000..a5163bf2f --- /dev/null +++ b/test/e2e/__snapshots__/config-manager-push-raw.e2e.test.js.snap @@ -0,0 +1,5 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`frodo config-manager push raw "frodo config-manager push raw -f raw.json -D test/e2e/exports/fr-config-manager/forgeops -m forgeops": should import a specific raw by file into forgeops" 1`] = `""`; + +exports[`frodo config-manager push raw "frodo config-manager push raw -f raw.json -D test/e2e/exports/fr-config-manager/forgeops -m forgeops": should import a specific raw by file into forgeops" 2`] = `""`; diff --git a/test/e2e/config-manager-push-raw.e2e.test.js b/test/e2e/config-manager-push-raw.e2e.test.js new file mode 100644 index 000000000..459179c5b --- /dev/null +++ b/test/e2e/config-manager-push-raw.e2e.test.js @@ -0,0 +1,74 @@ +/** + * 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. + */ + +/* +// ForgeOps + +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://nightly.gcp.forgeops.com/am frodo config-manager push raw -f raw.json -D test/e2e/exports/fr-config-manager/forgeops -m forgeops +*/ + +import cp from 'child_process'; +import { promisify } from 'util'; +import { getEnv, removeAnsiEscapeCodes } from './utils/TestUtils'; +import { forgeops_connection as fc } from './utils/TestConfig'; + +const exec = promisify(cp.exec); + +process.env['FRODO_MOCK'] = '1'; +const forgeopsEnv = getEnv(fc); + +const allDirectory = "test/e2e/exports/fr-config-manager/forgeops"; + +describe('frodo config-manager push raw ', () => { + test(`"frodo config-manager push raw -f raw.json -D ${allDirectory} -m forgeops": should import a specific raw by file into forgeops"`, async () => { + const CMD = `frodo config-manager push raw -f raw.json -D ${allDirectory} -m forgeops`; + const { stdout, stderr } = await exec(CMD, forgeopsEnv); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + expect(removeAnsiEscapeCodes(stderr)).toMatchSnapshot() +}); +}); \ No newline at end of file diff --git a/test/e2e/exports/fr-config-manager/forgeops/raw.json b/test/e2e/exports/fr-config-manager/forgeops/raw.json new file mode 100644 index 000000000..b63c4fbd5 --- /dev/null +++ b/test/e2e/exports/fr-config-manager/forgeops/raw.json @@ -0,0 +1,3 @@ +[ + { "path": "/openidm/config/authentication" } + ] \ No newline at end of file diff --git a/test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config/authentication.json b/test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config/authentication.json new file mode 100644 index 000000000..2b178188b --- /dev/null +++ b/test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config/authentication.json @@ -0,0 +1,60 @@ +{ + "_id": "authentication", + "rsFilter": { + "anonymousUserMapping": { + "executeAugmentationScript": false, + "localUser": "internal/user/anonymous", + "roles": [ + "internal/role/openidm-reg" + ] + }, + "augmentSecurityContext": { + "source": "require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, 'privileges', 'privilegeAssignments');", + "type": "text/javascript" + }, + "cache": { + "maxTimeout": "300 seconds" + }, + "clientId": "idm-resource-server", + "clientSecret": "&{rs.client.secret|password}", + "scopes": [ + "fr:idm:*" + ], + "staticUserMapping": [ + { + "executeAugmentationScript": false, + "localUser": "internal/user/openidm-admin", + "roles": [ + "internal/role/openidm-authorized", + "internal/role/openidm-admin" + ], + "subject": "amadmin" + }, + { + "executeAugmentationScript": false, + "localUser": "internal/user/idm-provisioning", + "roles": [ + "internal/role/openidm-admin" + ], + "subject": "idm-provisioning" + } + ], + "subjectMapping": [ + { + "additionalUserFields": [ + "adminOfOrg", + "ownerOfOrg" + ], + "defaultRoles": [ + "internal/role/openidm-authorized" + ], + "propertyMapping": { + "sub": "_id" + }, + "queryOnResource": "managed/user", + "userRoles": "authzRoles/*" + } + ], + "tokenIntrospectUrl": "http://am/am/oauth2/introspect" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/am_1076162899/recording.har new file mode 100644 index 000000000..6a4f87ce1 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/am_1076162899/recording.har @@ -0,0 +1,631 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_f_D_m/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/4.0.0-30" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + }, + { + "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": 370, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://platform.dev.trivir.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 587, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 587, + "text": "{\"_id\":\"*\",\"_rev\":\"2075994313\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"iPlanetDirectoryPro\",\"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\":[],\"nodeDesignerXuiEnabled\":true}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Mon, 23 Mar 2026 13:45:37 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "587" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "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": "\"2075994313\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 631, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-23T13:45:37.776Z", + "time": 28, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 28 + } + }, + { + "_id": "9f5671275c36a1c0090d0df26ce0e93f", + "_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/4.0.0-30" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + }, + { + "name": "accept-api-version", + "value": "resource=2.0, protocol=1.0" + }, + { + "name": "x-openam-username", + "value": "amadmin" + }, + { + "name": "x-openam-password", + "value": "41ghjnKpNFAFU/HXw82HbFbitYNOOJ0g" + }, + { + "name": "content-length", + "value": "2" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 497, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{}" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/am/json/realms/root/authenticate" + }, + "response": { + "bodySize": 167, + "content": { + "mimeType": "application/json", + "size": 167, + "text": "{\"tokenId\":\"\",\"successUrl\":\"/am/console\",\"realm\":\"/\"}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + }, + { + "httpOnly": true, + "name": "iPlanetDirectoryPro", + "path": "/", + "sameSite": "none", + "secure": true, + "value": "" + }, + { + "httpOnly": true, + "name": "amlbcookie", + "path": "/", + "sameSite": "none", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Mon, 23 Mar 2026 13:45:37 GMT" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "content-length", + "value": "167" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "iPlanetDirectoryPro=; Path=/; Secure; HttpOnly; SameSite=none" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "amlbcookie=; Path=/; Secure; HttpOnly; SameSite=none" + }, + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=2.1" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 693, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-23T13:45:37.811Z", + "time": 24, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 24 + } + }, + { + "_id": "6a3744385d3fd7416ea7089e610fa7e7", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 128, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-30" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + }, + { + "name": "accept-api-version", + "value": "resource=4.0" + }, + { + "name": "content-length", + "value": "128" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 424, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"tokenId\":\"\"}" + }, + "queryString": [ + { + "name": "_action", + "value": "getSessionInfo" + } + ], + "url": "https://platform.dev.trivir.com/am/json/realms/root/sessions/?_action=getSessionInfo" + }, + "response": { + "bodySize": 292, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 292, + "text": "{\"username\":\"amadmin\",\"universalId\":\"id=amadmin,ou=user,ou=am-config\",\"realm\":\"/\",\"latestAccessTime\":\"2026-03-23T13:45:37Z\",\"maxIdleExpirationTime\":\"2026-03-23T14:15:37Z\",\"maxSessionExpirationTime\":\"2026-03-23T15:45:36Z\",\"properties\":{\"AMCtxId\":\"43ba9500-5021-4093-850b-dc18b8548553-102102\"}}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Mon, 23 Mar 2026 13:45:37 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "292" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=4.0" + }, + { + "name": "content-security-policy", + "value": "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": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 610, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-23T13:45:37.843Z", + "time": 5, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 5 + } + }, + { + "_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/4.0.0-30" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "cookie", + "value": "iPlanetDirectoryPro=" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 520, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://platform.dev.trivir.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 257, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 257, + "text": "{\"_id\":\"version\",\"_rev\":\"-466575464\",\"version\":\"8.0.1\",\"fullVersion\":\"ForgeRock Access Management 8.0.1 Build b59bc0908346197b0c33afcb9e733d0400feeea1 (2025-April-15 11:37)\",\"revision\":\"b59bc0908346197b0c33afcb9e733d0400feeea1\",\"date\":\"2025-April-15 11:37\"}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Mon, 23 Mar 2026 13:45:37 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "257" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "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": "\"-466575464\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 631, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-23T13:45:37.856Z", + "time": 6, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 6 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/oauth2_393036114/recording.har new file mode 100644 index 000000000..cdc50808c --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/oauth2_393036114/recording.har @@ -0,0 +1,289 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_f_D_m/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "a684e2f67fd67a4263878c3124af167a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 365, + "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/4.0.0-30" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "cookie", + "value": "iPlanetDirectoryPro=" + }, + { + "name": "content-length", + "value": "365" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 565, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "redirect_uri=https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html&scope=fr:idm:* openid&response_type=code&client_id=idm-admin-ui&csrf=o0lZEEfrBWAeylthTNhlktvrIYw.*AAJTSQACMDIAAlNLABxGRkNOR0dHZTZBRWgyS1RhWFVXdmhYNG9ZZkE9AAR0eXBlAANDVFMAAlMxAAIwMQ..*&decision=allow&code_challenge=E4uA0amd_23J-z6NGTDPItPKGG3eN4qhGB9sTnjrf40&code_challenge_method=S256" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/am/oauth2/authorize" + }, + "response": { + "bodySize": 0, + "content": { + "mimeType": "text/plain", + "size": 0 + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + }, + { + "expires": "1970-01-01T00:00:00.000Z", + "httpOnly": true, + "name": "OAUTH_REQUEST_ATTRIBUTES", + "path": "/", + "sameSite": "none", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Mon, 23 Mar 2026 13:45:38 GMT" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "OAUTH_REQUEST_ATTRIBUTES=; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Path=/; Secure; HttpOnly; SameSite=none" + }, + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "location", + "value": "https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html?code=D7k-twSZq0ENVUPu7SATAk0I4AM&iss=https%3A%2F%2Fplatform.dev.trivir.com%2Fam%2Foauth2&client_id=idm-admin-ui" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 673, + "httpVersion": "HTTP/1.1", + "redirectURL": "https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html?code=D7k-twSZq0ENVUPu7SATAk0I4AM&iss=https%3A%2F%2Fplatform.dev.trivir.com%2Fam%2Foauth2&client_id=idm-admin-ui", + "status": 302, + "statusText": "Found" + }, + "startedDateTime": "2026-03-23T13:45:37.871Z", + "time": 70, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 70 + } + }, + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 224, + "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/4.0.0-30" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "224" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 424, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "client_id=idm-admin-ui&redirect_uri=https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html&grant_type=authorization_code&code=D7k-twSZq0ENVUPu7SATAk0I4AM&code_verifier=2XoLSm5cBqpRoCF6XefxSL5q8-zaw8q_CBQnH-l7f64" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1250, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1250, + "text": "{\"access_token\":\"\",\"scope\":\"openid fr:idm:*\",\"id_token\":\"\",\"token_type\":\"Bearer\",\"expires_in\":239}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Mon, 23 Mar 2026 13:45:38 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1250" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "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": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 405, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-23T13:45:37.948Z", + "time": 40, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 40 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/openidm_3290118515/recording.har new file mode 100644 index 000000000..3aa80b2f0 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/openidm_3290118515/recording.har @@ -0,0 +1,167 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_f_D_m/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "e5d4aec279b6a0c039410eba6fbae96a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1140, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-30" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "1140" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 418, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"authentication\",\"rsFilter\":{\"anonymousUserMapping\":{\"executeAugmentationScript\":false,\"localUser\":\"internal/user/anonymous\",\"roles\":[\"internal/role/openidm-reg\"]},\"augmentSecurityContext\":{\"source\":\"require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, 'privileges', 'privilegeAssignments');\",\"type\":\"text/javascript\"},\"cache\":{\"maxTimeout\":\"300 seconds\"},\"clientId\":\"idm-resource-server\",\"clientSecret\":\"&{rs.client.secret|password}\",\"scopes\":[\"fr:idm:*\"],\"staticUserMapping\":[{\"executeAugmentationScript\":false,\"localUser\":\"internal/user/openidm-admin\",\"roles\":[\"internal/role/openidm-authorized\",\"internal/role/openidm-admin\"],\"subject\":\"amadmin\"},{\"executeAugmentationScript\":false,\"localUser\":\"internal/user/idm-provisioning\",\"roles\":[\"internal/role/openidm-admin\"],\"subject\":\"idm-provisioning\"}],\"subjectMapping\":[{\"additionalUserFields\":[\"adminOfOrg\",\"ownerOfOrg\"],\"defaultRoles\":[\"internal/role/openidm-authorized\"],\"propertyMapping\":{\"sub\":\"_id\"},\"queryOnResource\":\"managed/user\",\"userRoles\":\"authzRoles/*\"}],\"tokenIntrospectUrl\":\"http://am/am/oauth2/introspect\"}}" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/openidm/config/authentication" + }, + "response": { + "bodySize": 1140, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1140, + "text": "{\"_id\":\"authentication\",\"rsFilter\":{\"anonymousUserMapping\":{\"executeAugmentationScript\":false,\"localUser\":\"internal/user/anonymous\",\"roles\":[\"internal/role/openidm-reg\"]},\"augmentSecurityContext\":{\"source\":\"require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, 'privileges', 'privilegeAssignments');\",\"type\":\"text/javascript\"},\"cache\":{\"maxTimeout\":\"300 seconds\"},\"clientId\":\"idm-resource-server\",\"clientSecret\":\"&{rs.client.secret|password}\",\"scopes\":[\"fr:idm:*\"],\"staticUserMapping\":[{\"executeAugmentationScript\":false,\"localUser\":\"internal/user/openidm-admin\",\"roles\":[\"internal/role/openidm-authorized\",\"internal/role/openidm-admin\"],\"subject\":\"amadmin\"},{\"executeAugmentationScript\":false,\"localUser\":\"internal/user/idm-provisioning\",\"roles\":[\"internal/role/openidm-admin\"],\"subject\":\"idm-provisioning\"}],\"subjectMapping\":[{\"additionalUserFields\":[\"adminOfOrg\",\"ownerOfOrg\"],\"defaultRoles\":[\"internal/role/openidm-authorized\"],\"propertyMapping\":{\"sub\":\"_id\"},\"queryOnResource\":\"managed/user\",\"userRoles\":\"authzRoles/*\"}],\"tokenIntrospectUrl\":\"http://am/am/oauth2/introspect\"}}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/openidm", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Mon, 23 Mar 2026 13:45:38 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "content-length", + "value": "1140" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/openidm; Secure; HttpOnly" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "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": "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": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 638, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-23T13:45:37.996Z", + "time": 57, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 57 + } + } + ], + "pages": [], + "version": "1.2" + } +} From a17bdc24a801f857f213a0aeabfe33908b32b1f0 Mon Sep 17 00:00:00 2001 From: Dallin Sevy Date: Tue, 16 Jun 2026 10:34:02 -0600 Subject: [PATCH 2/3] update FrConfigRawOps file --- .../config-manager-push-raw.ts | 44 +- .../config-manager-push.ts | 2 +- src/configManagerOps/FrConfigRawOps.ts | 53 +- .../config-manager-push-raw.test.js.snap | 92 +- .../config-manager-push.test.js.snap | 1 + .../config-manager-push-raw.e2e.test.js.snap | 28 +- test/e2e/config-manager-push-raw.e2e.test.js | 38 +- .../services/SocialIdentityProviders.json | 10 + .../cloud/raw/environment/variables.json | 30 + .../cloud/raw/openidm/config/cluster.json | 9 + .../fr-config-manager/forgeops/raw.json | 3 - .../services/SocialIdentityProviders.json | 10 + .../raw/openidm/config/authentication.json | 60 -- .../forgeops/raw/openidm/config/cluster.json | 9 + .../am_1076162899/recording.har | 468 +++++++++++ .../environment_1072573434/recording.har | 461 ++++++++++ .../oauth2_393036114/recording.har | 146 ++++ .../openidm_3290118515/recording.har | 462 ++++++++++ .../am_1076162899/recording.har | 788 ++++++++++++++++++ .../oauth2_393036114/recording.har | 40 +- .../openidm_3290118515/recording.har | 167 ++++ .../am_1076162899/recording.har | 468 +++++++++++ .../environment_1072573434/recording.har | 461 ++++++++++ .../oauth2_393036114/recording.har | 146 ++++ .../openidm_3290118515/recording.har | 462 ++++++++++ .../am_1076162899/recording.har | 211 ++++- .../oauth2_393036114/recording.har | 289 +++++++ .../openidm_3290118515/recording.har | 36 +- 28 files changed, 4733 insertions(+), 261 deletions(-) create mode 100644 test/e2e/exports/fr-config-manager/cloud/raw/am/json/realms/root/realms/alpha/realm-config/services/SocialIdentityProviders.json create mode 100644 test/e2e/exports/fr-config-manager/cloud/raw/environment/variables.json create mode 100644 test/e2e/exports/fr-config-manager/cloud/raw/openidm/config/cluster.json delete mode 100644 test/e2e/exports/fr-config-manager/forgeops/raw.json create mode 100644 test/e2e/exports/fr-config-manager/forgeops/raw/am/json/realms/root/realms/alpha/realm-config/services/SocialIdentityProviders.json delete mode 100644 test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config/authentication.json create mode 100644 test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config/cluster.json create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/am_1076162899/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/environment_1072573434/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/oauth2_393036114/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/openidm_3290118515/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_m_314327836/am_1076162899/recording.har rename test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/{0_f_D_m_2699374093 => 0_D_m_314327836}/oauth2_393036114/recording.har (86%) create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_m_314327836/openidm_3290118515/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/am_1076162899/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/environment_1072573434/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/oauth2_393036114/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/openidm_3290118515/recording.har rename test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/{0_f_D_m_2699374093 => 0_p_D_m_3145161795}/am_1076162899/recording.har (74%) create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_m_3145161795/oauth2_393036114/recording.har rename test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/{0_f_D_m_2699374093 => 0_p_D_m_3145161795}/openidm_3290118515/recording.har (54%) diff --git a/src/cli/config-manager/config-manager-push/config-manager-push-raw.ts b/src/cli/config-manager/config-manager-push/config-manager-push-raw.ts index ca9a06004..084d072af 100644 --- a/src/cli/config-manager/config-manager-push/config-manager-push-raw.ts +++ b/src/cli/config-manager/config-manager-push/config-manager-push-raw.ts @@ -3,7 +3,6 @@ import { Option } from 'commander'; import { configManagerImportRaw } from '../../../configManagerOps/FrConfigRawOps'; import { getTokens } from '../../../ops/AuthenticateOps'; -import { printMessage } from '../../../utils/Console'; import { FrodoCommand } from '../../FrodoCommand'; const { CLOUD_DEPLOYMENT_TYPE_KEY, FORGEOPS_DEPLOYMENT_TYPE_KEY } = @@ -25,31 +24,11 @@ export default function setup() { .description('Import raw configurations to the tenant.') .addOption( new Option( - '-f, --config-file ', - 'The file path of the service object config file. ' + '-p, --config-path ', + 'The path of the service object config file. ' ) ) - .addHelpText( - 'after', - 'HELP MESSAGE:\n' + - 'Make sure to create an import config file: raw.json to run this command.\n' + - 'Example command: frodo config-manager pull raw -f raw.json -D ../testDir frodo-dev\n\n' + - `Config file example:\n` + - '------------ Example Oauth2 agents import config for oauth2-agents.json file -----------\n' + - '[\n' + - ' { "path": "/openidm/config/authentication" },\n' + - ' {\n' + - ' "path": "/am/json/realms/root/realms/alpha/realm-config/webhooks/test-webhook",\n' + - ' "overrides": { "url": "${TEST_WEBHOOK_URL}" },\n' + - ' "pushApiVersion": {\n' + - ' "protocol": "2.0",\n' + - ' "resource": "1.0"\n' + - ' }\n' + - ' },\n' + - ' {"path": "/environment/release"}\n' + - '] \n' + - '* -------------------------------------------------------------------------------------------- \n' - ) + .action(async (host, realm, user, password, options, command) => { command.handleDefaultArgsAndOpts( host, @@ -61,27 +40,12 @@ export default function setup() { ); if (await getTokens(false, true, deploymentTypes)) { - const outcome: boolean = await configManagerImportRaw( - options.configFile - ); + const outcome: boolean = await configManagerImportRaw(options.path); if (!outcome) { - printMessage( - `Failed to export one or more config files. ${options.verbose ? '' : 'Check --verbose for me details.'}` - ); 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/config-manager/config-manager-push/config-manager-push.ts b/src/cli/config-manager/config-manager-push/config-manager-push.ts index a7ff271d8..b7c7e2638 100644 --- a/src/cli/config-manager/config-manager-push/config-manager-push.ts +++ b/src/cli/config-manager/config-manager-push/config-manager-push.ts @@ -13,9 +13,9 @@ import Locales from './config-manager-push-locales'; import ManagedObjects from './config-manager-push-managed-objects'; import OrgPrivileges from './config-manager-push-org-privileges'; import PasswordPolicy from './config-manager-push-password-policy'; +import Raw from './config-manager-push-raw'; import Schedules from './config-manager-push-schedules'; import ServiceObjects from './config-manager-push-service-objects'; -import Raw from './config-manager-push-raw'; import TermsAndConditions from './config-manager-push-terms-and-conditions'; import Themes from './config-manager-push-themes'; import UiConfig from './config-manager-push-ui-config'; diff --git a/src/configManagerOps/FrConfigRawOps.ts b/src/configManagerOps/FrConfigRawOps.ts index 98e5318c6..45b89d95c 100644 --- a/src/configManagerOps/FrConfigRawOps.ts +++ b/src/configManagerOps/FrConfigRawOps.ts @@ -36,19 +36,34 @@ export async function configManagerExportRaw(file: string): Promise { } /** - * Import every item from the list in the provided json file - * @returns True if each file was successfully exported + * Import all raw configuration exported in fr-config-manager format + * @param path optional flag to provide path to service config file + * @returns {Promise} true if each file was successfully imported */ -export async function configManagerImportRaw(file: string): Promise { +export async function configManagerImportRaw(path?: string): Promise { try { - const filePath = getFilePath(file); - const rawConfig = JSON.parse(fs.readFileSync(filePath, 'utf8')); - for (const { path } of rawConfig) { - const filePath = getFilePath(`raw${path}.json`); - + const rawDir = getFilePath('raw/'); + const files = getJsonFiles(rawDir); + for (const filePath of files) { + const rawPath = filePath + .replace(rawDir, '') + .replace(/^\//, '') + .replace(/\.json$/, ''); + if (path && !rawPath.startsWith(path)) { + continue; + } const data = JSON.parse(fs.readFileSync(filePath, 'utf-8')); - - await importRawConfig({ path }, data); + if (data.result && Array.isArray(data.result)) { + for (const item of data.result) { + delete item._rev; + delete item._type; + await importRawConfig({ path: `${rawPath}/${item._id}` }, item); + } + } else { + delete data._rev; + delete data._type; + await importRawConfig({ path: rawPath }, data); + } } return true; } catch (error) { @@ -56,3 +71,21 @@ export async function configManagerImportRaw(file: string): Promise { return false; } } + +/** + * Recursively walks a directory tree and returns the full paths of all .json files found. + * @param dir root directory to search + * @returns full paths of all .json files found + */ +function getJsonFiles(dir: string): string[] { + const results: string[] = []; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = `${dir}/${entry.name}`; + if (entry.isDirectory()) { + results.push(...getJsonFiles(full)); + } else if (entry.name.endsWith('.json')) { + results.push(full); + } + } + return results; +} diff --git a/test/client_cli/en/__snapshots__/config-manager-push-raw.test.js.snap b/test/client_cli/en/__snapshots__/config-manager-push-raw.test.js.snap index ebaa1a914..46ebe6f60 100644 --- a/test/client_cli/en/__snapshots__/config-manager-push-raw.test.js.snap +++ b/test/client_cli/en/__snapshots__/config-manager-push-raw.test.js.snap @@ -3,85 +3,25 @@ exports[`CLI help interface for 'config-manager push raw' should be expected english 1`] = ` "Usage: frodo config-manager push raw [options] [host] [realm] [username] [password] -Import raw configurations to the tenant. +[Experimental] Import raw configurations to the tenant. Arguments: - host AM base URL, e.g.: https://cdk.iam.example.com/am. To use a connection profile, just specify a unique substring or alias. - 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. + host AM base URL, e.g.: https://cdk.iam.example.com/am. + To use a connection profile, just specify a unique + substring or alias. + 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. - -f, --config-file The file path of the service object config file. - --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) - --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. - --passphrase The passphrase for the Amster private key if it is encrypted. - --private-key File containing the private key for authenticating with Amster. Supported formats include PEM (both PKCS#1 and PKCS#8 variants), OpenSSH, DNSSEC, and JWK. - --retry Retry failed operations. Valid values for strategy: - everything: Retry all failed operations. - network: Retry only network-related failed operations. - nothing: Do not retry failed operations. - The selected retry strategy controls how the CLI handles failures. (choices: "nothing", "everything", "network", default: Do not retry failed operations.) - --sa-id Service account id. - --sa-jwk-file File containing the JSON Web Key (JWK) associated with the the service account. - --use-realm-prefix-on-managed-objects Set to true if you want to use the realm name as a prefix on managed object configuration, e.g. managed/alpha_user, managed/alpha_application or managed/bravo_organization. When false, the default behaviour of using managed/user etc. is retained. This option is ignored when the deployment type is "cloud". - --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_AMSTER_PASSPHRASE: Passphrase for the Amster private key if it is encrypted. Overridden by '--passphrase' option. - FRODO_AMSTER_PRIVATE_KEY: Amster private key. Overridden by '--private-key' option but takes the actual private key as a value (i.e. the file contents), not a file name. Supported formats include PEM (both PKCS#1 and PKCS#8 variants), OpenSSH, DNSSEC, and JWK. - 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. When using an Amster private key, specifies which journey to use for Amster authentication as opposed to the default 'amsterService' journey. - FRODO_AUTHENTICATION_HEADER_OVERRIDES: Map of headers: '{"host":"am.example.com:8081"}'. These headers are sent with all requests and can be used to override default behavior, for example to set a custom host header for Proxy Connect-protected PingOne Advanced Identity Cloud environments. - FRODO_CONFIGURATION_HEADER_OVERRIDES: Map of headers: '{"X-Configuration-Type":"mutable"}'. These headers are sent with all configuration requests and can be used to override default behavior, for example to set a custom configuration header for mutable PingOne Advanced Identity Cloud environments. - FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'. - FRODO_IGA: Set to "true" to enable IGA (Identity Governance) endpoints for cloud deployments, or "false" to disable them, overriding auto-detected value. - 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. - -HELP MESSAGE: -Make sure to create an import config file: raw.json to run this command. -Example command: frodo config-manager pull raw -f raw.json -D ../testDir frodo-dev - -Config file example: ------------- Example Oauth2 agents import config for oauth2-agents.json file ----------- -[ - { "path": "/openidm/config/authentication" }, - { - "path": "/am/json/realms/root/realms/alpha/realm-config/webhooks/test-webhook", - "overrides": { "url": "\${TEST_WEBHOOK_URL}" }, - "pushApiVersion": { - "protocol": "2.0", - "resource": "1.0" - } - }, - {"path": "/environment/release"} -] -* -------------------------------------------------------------------------------------------- - + -p, --config-path The path of the service object config file. + -h, --help Help + -hh, --help-more Help with all options. + -hhh, --help-all Help with all options, environment variables, and + usage examples. " `; diff --git a/test/client_cli/en/__snapshots__/config-manager-push.test.js.snap b/test/client_cli/en/__snapshots__/config-manager-push.test.js.snap index c079ca13f..d11fc6a66 100644 --- a/test/client_cli/en/__snapshots__/config-manager-push.test.js.snap +++ b/test/client_cli/en/__snapshots__/config-manager-push.test.js.snap @@ -28,6 +28,7 @@ Commands: managed-objects [Experimental] Import managed objects. org-privileges [Experimental] Import organization privileges config. password-policy [Experimental] Import password-policy objects. + raw [Experimental] Import raw configurations to the tenant. schedules [Experimental] Import schedules. service-objects [Experimental] Import service objects. terms-and-conditions [Experimental] Import terms and conditions. diff --git a/test/e2e/__snapshots__/config-manager-push-raw.e2e.test.js.snap b/test/e2e/__snapshots__/config-manager-push-raw.e2e.test.js.snap index a5163bf2f..10d39e67b 100644 --- a/test/e2e/__snapshots__/config-manager-push-raw.e2e.test.js.snap +++ b/test/e2e/__snapshots__/config-manager-push-raw.e2e.test.js.snap @@ -1,5 +1,29 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`frodo config-manager push raw "frodo config-manager push raw -f raw.json -D test/e2e/exports/fr-config-manager/forgeops -m forgeops": should import a specific raw by file into forgeops" 1`] = `""`; +exports[`frodo config-manager push raw "frodo config-manager push raw -D test/e2e/exports/fr-config-manager/cloud: should import raw configuration into cloud" 1`] = `""`; -exports[`frodo config-manager push raw "frodo config-manager push raw -f raw.json -D test/e2e/exports/fr-config-manager/forgeops -m forgeops": should import a specific raw by file into forgeops" 2`] = `""`; +exports[`frodo config-manager push raw "frodo config-manager push raw -D test/e2e/exports/fr-config-manager/cloud: should import raw configuration into cloud" 2`] = ` +"Experimental feature in use: 'frodo config-manager push raw'. This feature may change without notice. +" +`; + +exports[`frodo config-manager push raw "frodo config-manager push raw -D test/e2e/exports/fr-config-manager/forgeops -m forgeops": should import raw configuration into forgeops" 1`] = `""`; + +exports[`frodo config-manager push raw "frodo config-manager push raw -D test/e2e/exports/fr-config-manager/forgeops -m forgeops": should import raw configuration into forgeops" 2`] = ` +"Experimental feature in use: 'frodo config-manager push raw'. This feature may change without notice. +" +`; + +exports[`frodo config-manager push raw "frodo config-manager push raw -p test/e2e/exports/fr-config-manager/cloud/raw/environment -D test/e2e/exports/fr-config-manager/cloud: should import raw configuration into cloud" 1`] = `""`; + +exports[`frodo config-manager push raw "frodo config-manager push raw -p test/e2e/exports/fr-config-manager/cloud/raw/environment -D test/e2e/exports/fr-config-manager/cloud: should import raw configuration into cloud" 2`] = ` +"Experimental feature in use: 'frodo config-manager push raw'. This feature may change without notice. +" +`; + +exports[`frodo config-manager push raw "frodo config-manager push raw -p test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config -m forgeops": should import raw configuration into forgeops" 1`] = `""`; + +exports[`frodo config-manager push raw "frodo config-manager push raw -p test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config -m forgeops": should import raw configuration into forgeops" 2`] = ` +"Experimental feature in use: 'frodo config-manager push raw'. This feature may change without notice. +" +`; diff --git a/test/e2e/config-manager-push-raw.e2e.test.js b/test/e2e/config-manager-push-raw.e2e.test.js index 459179c5b..9f5d98fb5 100644 --- a/test/e2e/config-manager-push-raw.e2e.test.js +++ b/test/e2e/config-manager-push-raw.e2e.test.js @@ -48,27 +48,57 @@ /* // ForgeOps +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://nightly.gcp.forgeops.com/am frodo config-manager push raw -D test/e2e/exports/fr-config-manager/forgeops -m forgeops +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://nightly.gcp.forgeops.com/am frodo config-manager push raw -p test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config -D test/e2e/exports/fr-config-manager/forgeops -m forgeops + +// Cloud +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo config-manager push raw -D test/e2e/exports/fr-config-manager/cloud +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://openam-frodo-dev.forgeblocks.com/am frodo config-manager push raw -p test/e2e/exports/fr-config-manager/cloud/raw/environment -D test/e2e/exports/fr-config-manager/cloud -FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://nightly.gcp.forgeops.com/am frodo config-manager push raw -f raw.json -D test/e2e/exports/fr-config-manager/forgeops -m forgeops */ import cp from 'child_process'; import { promisify } from 'util'; import { getEnv, removeAnsiEscapeCodes } from './utils/TestUtils'; import { forgeops_connection as fc } from './utils/TestConfig'; +import { connection as c } from './utils/TestConfig'; const exec = promisify(cp.exec); process.env['FRODO_MOCK'] = '1'; const forgeopsEnv = getEnv(fc); +const cloudEnv = getEnv(c) -const allDirectory = "test/e2e/exports/fr-config-manager/forgeops"; +const forgeopsDirectory = "test/e2e/exports/fr-config-manager/forgeops"; +const cloudDirectory = "test/e2e/exports/fr-config-manager/cloud" describe('frodo config-manager push raw ', () => { - test(`"frodo config-manager push raw -f raw.json -D ${allDirectory} -m forgeops": should import a specific raw by file into forgeops"`, async () => { - const CMD = `frodo config-manager push raw -f raw.json -D ${allDirectory} -m forgeops`; + +//Forgeops +test(`"frodo config-manager push raw -D ${forgeopsDirectory} -m forgeops": should import raw configuration into forgeops"`, async () => { + const CMD = `frodo config-manager push raw -D ${forgeopsDirectory} -m forgeops`; + const { stdout, stderr } = await exec(CMD, forgeopsEnv); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + expect(removeAnsiEscapeCodes(stderr)).toMatchSnapshot() +}); +test(`"frodo config-manager push raw -p test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config -m forgeops": should import raw configuration into forgeops"`, async () => { + const CMD = `frodo config-manager push raw -p test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config -D ${forgeopsDirectory} -m forgeops`; const { stdout, stderr } = await exec(CMD, forgeopsEnv); expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); expect(removeAnsiEscapeCodes(stderr)).toMatchSnapshot() }); + +//Cloud +test(`"frodo config-manager push raw -D ${cloudDirectory}: should import raw configuration into cloud"`, async () => { + const CMD = `frodo config-manager push raw -D ${cloudDirectory} `; + const { stdout, stderr } = await exec(CMD, cloudEnv); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + expect(removeAnsiEscapeCodes(stderr)).toMatchSnapshot() + }); +test(`"frodo config-manager push raw -p test/e2e/exports/fr-config-manager/cloud/raw/environment -D ${cloudDirectory}: should import raw configuration into cloud"`, async () => { + const CMD = `frodo config-manager push raw -p test/e2e/exports/fr-config-manager/cloud/raw/environment -D ${cloudDirectory}`; + const { stdout, stderr } = await exec(CMD, cloudEnv); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + expect(removeAnsiEscapeCodes(stderr)).toMatchSnapshot() + }); }); \ No newline at end of file diff --git a/test/e2e/exports/fr-config-manager/cloud/raw/am/json/realms/root/realms/alpha/realm-config/services/SocialIdentityProviders.json b/test/e2e/exports/fr-config-manager/cloud/raw/am/json/realms/root/realms/alpha/realm-config/services/SocialIdentityProviders.json new file mode 100644 index 000000000..300f81169 --- /dev/null +++ b/test/e2e/exports/fr-config-manager/cloud/raw/am/json/realms/root/realms/alpha/realm-config/services/SocialIdentityProviders.json @@ -0,0 +1,10 @@ +{ + "_id": "", + "_rev": "1077208638", + "_type": { + "_id": "SocialIdentityProviders", + "collection": false, + "name": "Social Identity Provider Service" + }, + "enabled": true +} diff --git a/test/e2e/exports/fr-config-manager/cloud/raw/environment/variables.json b/test/e2e/exports/fr-config-manager/cloud/raw/environment/variables.json new file mode 100644 index 000000000..fca028fcf --- /dev/null +++ b/test/e2e/exports/fr-config-manager/cloud/raw/environment/variables.json @@ -0,0 +1,30 @@ +{ + "pagedResultsCookie": null, + "remainingPagedResults": -1, + "result": [ + { + "_id": "esv-frodo-test-variable-1", + "description": "description1", + "expressionType": "string", + "loaded": true, + "valueBase64": "dmFsdWUx" + }, + { + "_id": "esv-frodo-test-variable-2", + "description": "description2", + "expressionType": "int", + "loaded": true, + "valueBase64": "NDI=" + }, + { + "_id": "esv-test-variable", + "description": "test", + "expressionType": "string", + "loaded": true, + "valueBase64": "dGVzdA==" + } + ], + "resultCount": 3, + "totalPagedResults": -1, + "totalPagedResultsPolicy": "NONE" +} diff --git a/test/e2e/exports/fr-config-manager/cloud/raw/openidm/config/cluster.json b/test/e2e/exports/fr-config-manager/cloud/raw/openidm/config/cluster.json new file mode 100644 index 000000000..843f02ac6 --- /dev/null +++ b/test/e2e/exports/fr-config-manager/cloud/raw/openidm/config/cluster.json @@ -0,0 +1,9 @@ +{ + "_id": "cluster", + "enabled": true, + "instanceCheckInInterval": 5000, + "instanceCheckInOffset": 0, + "instanceId": "&{openidm.node.id}", + "instanceRecoveryTimeout": 30000, + "instanceTimeout": 30000 +} diff --git a/test/e2e/exports/fr-config-manager/forgeops/raw.json b/test/e2e/exports/fr-config-manager/forgeops/raw.json deleted file mode 100644 index b63c4fbd5..000000000 --- a/test/e2e/exports/fr-config-manager/forgeops/raw.json +++ /dev/null @@ -1,3 +0,0 @@ -[ - { "path": "/openidm/config/authentication" } - ] \ No newline at end of file diff --git a/test/e2e/exports/fr-config-manager/forgeops/raw/am/json/realms/root/realms/alpha/realm-config/services/SocialIdentityProviders.json b/test/e2e/exports/fr-config-manager/forgeops/raw/am/json/realms/root/realms/alpha/realm-config/services/SocialIdentityProviders.json new file mode 100644 index 000000000..300f81169 --- /dev/null +++ b/test/e2e/exports/fr-config-manager/forgeops/raw/am/json/realms/root/realms/alpha/realm-config/services/SocialIdentityProviders.json @@ -0,0 +1,10 @@ +{ + "_id": "", + "_rev": "1077208638", + "_type": { + "_id": "SocialIdentityProviders", + "collection": false, + "name": "Social Identity Provider Service" + }, + "enabled": true +} diff --git a/test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config/authentication.json b/test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config/authentication.json deleted file mode 100644 index 2b178188b..000000000 --- a/test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config/authentication.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "_id": "authentication", - "rsFilter": { - "anonymousUserMapping": { - "executeAugmentationScript": false, - "localUser": "internal/user/anonymous", - "roles": [ - "internal/role/openidm-reg" - ] - }, - "augmentSecurityContext": { - "source": "require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, 'privileges', 'privilegeAssignments');", - "type": "text/javascript" - }, - "cache": { - "maxTimeout": "300 seconds" - }, - "clientId": "idm-resource-server", - "clientSecret": "&{rs.client.secret|password}", - "scopes": [ - "fr:idm:*" - ], - "staticUserMapping": [ - { - "executeAugmentationScript": false, - "localUser": "internal/user/openidm-admin", - "roles": [ - "internal/role/openidm-authorized", - "internal/role/openidm-admin" - ], - "subject": "amadmin" - }, - { - "executeAugmentationScript": false, - "localUser": "internal/user/idm-provisioning", - "roles": [ - "internal/role/openidm-admin" - ], - "subject": "idm-provisioning" - } - ], - "subjectMapping": [ - { - "additionalUserFields": [ - "adminOfOrg", - "ownerOfOrg" - ], - "defaultRoles": [ - "internal/role/openidm-authorized" - ], - "propertyMapping": { - "sub": "_id" - }, - "queryOnResource": "managed/user", - "userRoles": "authzRoles/*" - } - ], - "tokenIntrospectUrl": "http://am/am/oauth2/introspect" - } -} diff --git a/test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config/cluster.json b/test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config/cluster.json new file mode 100644 index 000000000..843f02ac6 --- /dev/null +++ b/test/e2e/exports/fr-config-manager/forgeops/raw/openidm/config/cluster.json @@ -0,0 +1,9 @@ +{ + "_id": "cluster", + "enabled": true, + "instanceCheckInInterval": 5000, + "instanceCheckInOffset": 0, + "instanceId": "&{openidm.node.id}", + "instanceRecoveryTimeout": 30000, + "instanceTimeout": 30000 +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/am_1076162899/recording.har new file mode 100644 index 000000000..4e6e52db8 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/am_1076162899/recording.har @@ -0,0 +1,468 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "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": 388, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 615, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 615, + "text": "{\"_id\":\"*\",\"_rev\":\"1955877839\",\"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,\"oauth2AIAgentsEnabled\":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": "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": "\"1955877839\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "615" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:25:35 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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": "2026-04-10T14:25:35.304Z", + "time": 285, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 285 + } + }, + { + "_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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "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": 1980, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 276, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 276, + "text": "{\"_id\":\"version\",\"_rev\":\"-1876078088\",\"version\":\"9.0.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 9.0.0-SNAPSHOT Build 2a2686af9631bd8d8866c92ea2411814899acefd (2026-March-30 15:23)\",\"revision\":\"2a2686af9631bd8d8866c92ea2411814899acefd\",\"date\":\"2026-March-30 15:23\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-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": "\"-1876078088\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "276" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:25:35 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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": "2026-04-10T14:25:35.756Z", + "time": 80, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 80 + } + }, + { + "_id": "c2c11ca1286e189f91800b1ed00c6e7b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "25" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2065, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"\",\"enabled\":true}" + }, + "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-security-policy", + "value": "default-src '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": "Fri, 10 Apr 2026 14:25:36 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 751, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:25:36.009Z", + "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/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/environment_1072573434/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/environment_1072573434/recording.har new file mode 100644 index 000000000..14f112684 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/environment_1072573434/recording.har @@ -0,0 +1,461 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_D/environment", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccc7ec61c2094114d7917814bb19b83b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "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": 1931, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/scopes/service-accounts" + }, + "response": { + "bodySize": 1975, + "content": { + "mimeType": "application/json; charset=utf-8", + "size": 1975, + "text": "[{\"scope\":\"fr:am:*\",\"description\":\"All Access Management APIs\"},{\"scope\":\"fr:autoaccess:*\",\"description\":\"All Auto Access APIs\"},{\"scope\":\"fr:idc:analytics:*\",\"description\":\"All Analytics APIs\"},{\"scope\":\"fr:idc:certificate:*\",\"description\":\"All TLS certificate APIs\",\"childScopes\":[{\"scope\":\"fr:idc:certificate:read\",\"description\":\"Read TLS certificates\"}]},{\"scope\":\"fr:idc:content-security-policy:*\",\"description\":\"All content security policy APIs\",\"childScopes\":[{\"scope\":\"fr:idc:content-security-policy:read\",\"description\":\"Read content security policy\"}]},{\"scope\":\"fr:idc:cookie-domain:*\",\"description\":\"All cookie domain APIs\",\"childScopes\":[{\"scope\":\"fr:idc:cookie-domain:read\",\"description\":\"Read cookie domains\"}]},{\"scope\":\"fr:idc:custom-domain:*\",\"description\":\"All custom domain APIs\",\"childScopes\":[{\"scope\":\"fr:idc:custom-domain:read\",\"description\":\"Read custom domains\"}]},{\"scope\":\"fr:idc:dataset:*\",\"description\":\"All dataset deletion APIs\",\"childScopes\":[{\"scope\":\"fr:idc:dataset:read\",\"description\":\"Read dataset deletions\"}]},{\"scope\":\"fr:idc:esv:*\",\"description\":\"All ESV APIs\",\"childScopes\":[{\"scope\":\"fr:idc:esv:read\",\"description\":\"Read ESVs, excluding values of secrets\"},{\"scope\":\"fr:idc:esv:update\",\"description\":\"Create, modify, and delete ESVs\"},{\"scope\":\"fr:idc:esv:restart\",\"description\":\"Restart workloads that consume ESVs\"}]},{\"scope\":\"fr:idc:promotion:*\",\"description\":\"All configuration promotion APIs\",\"childScopes\":[{\"scope\":\"fr:idc:promotion:read\",\"description\":\"Read configuration promotion\"}]},{\"scope\":\"fr:idc:release:*\",\"description\":\"All product release APIs\",\"childScopes\":[{\"scope\":\"fr:idc:release:read\",\"description\":\"Read product release\"}]},{\"scope\":\"fr:idc:sso-cookie:*\",\"description\":\"All SSO cookie APIs\",\"childScopes\":[{\"scope\":\"fr:idc:sso-cookie:read\",\"description\":\"Read SSO cookie\"}]},{\"scope\":\"fr:idc:ws:admin\",\"description\":\"All PingFederate APIs\"},{\"scope\":\"fr:idm:*\",\"description\":\"All Identity Management APIs\"}]" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "1975" + }, + { + "name": "etag", + "value": "W/\"7b7-9oeZSONSS8Sn+SSr15TXAygvvcE\"" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:25:35 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "134be7a2-4e40-4c1a-8ba1-7a3e41273be1" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 413, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:25:35.844Z", + "time": 82, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 82 + } + }, + { + "_id": "69c1d0a43379f655fa92ab92629fb532", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 129, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "129" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1964, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"esv-frodo-test-variable-1\",\"description\":\"description1\",\"expressionType\":\"string\",\"loaded\":true,\"valueBase64\":\"dmFsdWUx\"}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/variables/esv-frodo-test-variable-1" + }, + "response": { + "bodySize": 218, + "content": { + "mimeType": "application/json", + "size": 218, + "text": "{\"_id\":\"esv-frodo-test-variable-1\",\"description\":\"description1\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-03-11T21:03:06.985865Z\",\"lastChangedBy\":\"Frodo-SA-1773261131370\",\"loaded\":true,\"valueBase64\":\"dmFsdWUx\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:25:36 GMT" + }, + { + "name": "content-length", + "value": "218" + }, + { + "name": "x-forgerock-transactionid", + "value": "c7f0892d-3a97-4125-be91-c894663374bb" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 325, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:25:36.125Z", + "time": 716, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 716 + } + }, + { + "_id": "eb68eff0f22a05a39c721d73aaad3c9a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 122, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "122" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1964, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"esv-frodo-test-variable-2\",\"description\":\"description2\",\"expressionType\":\"int\",\"loaded\":true,\"valueBase64\":\"NDI=\"}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/variables/esv-frodo-test-variable-2" + }, + "response": { + "bodySize": 211, + "content": { + "mimeType": "application/json", + "size": 211, + "text": "{\"_id\":\"esv-frodo-test-variable-2\",\"description\":\"description2\",\"expressionType\":\"int\",\"lastChangeDate\":\"2026-03-11T21:03:09.552101Z\",\"lastChangedBy\":\"Frodo-SA-1773261131370\",\"loaded\":true,\"valueBase64\":\"NDI=\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:25:37 GMT" + }, + { + "name": "content-length", + "value": "211" + }, + { + "name": "x-forgerock-transactionid", + "value": "ed64200f-539e-40e4-842a-ba26470a7bd5" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 325, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:25:36.847Z", + "time": 650, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 650 + } + }, + { + "_id": "4f5e1685abe644c49ec3829a96027374", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 113, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "113" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1956, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"esv-test-variable\",\"description\":\"test\",\"expressionType\":\"string\",\"loaded\":true,\"valueBase64\":\"dGVzdA==\"}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/variables/esv-test-variable" + }, + "response": { + "bodySize": 197, + "content": { + "mimeType": "application/json", + "size": 197, + "text": "{\"_id\":\"esv-test-variable\",\"description\":\"test\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-03-25T21:11:19.814977Z\",\"lastChangedBy\":\"phales@trivir.com\",\"loaded\":true,\"valueBase64\":\"dGVzdA==\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:25:38 GMT" + }, + { + "name": "content-length", + "value": "197" + }, + { + "name": "x-forgerock-transactionid", + "value": "0d26ee35-6d34-41b7-9c5d-50c3c8058250" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 325, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:25:37.500Z", + "time": 801, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 801 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/oauth2_393036114/recording.har new file mode 100644 index 000000000..1a99a1fd6 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/oauth2_393036114/recording.har @@ -0,0 +1,146 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_D/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1362, + "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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1362" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 443, + "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:ws:admin fr:am:* fr:autoaccess:* fr:idc:esv:* 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:dataset:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1884, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1884, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:ws:admin fr:am:* fr:autoaccess:* fr:idc:esv:* 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:dataset:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-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": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1884" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:25:35 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 561, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:25:35.605Z", + "time": 143, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 143 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/openidm_3290118515/recording.har new file mode 100644 index 000000000..f40453adc --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_2157136892/openidm_3290118515/recording.har @@ -0,0 +1,462 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1992, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/810dd2f4-874b-4aad-9e0a-f8a57789f182?_fields=%2A" + }, + "response": { + "bodySize": 1408, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1408, + "text": "{\"_id\":\"810dd2f4-874b-4aad-9e0a-f8a57789f182\",\"_rev\":\"4773460a-f4b4-4472-a12b-8c7b7ad4fd76-9686\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1773261131370\",\"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:dataset:*\",\"fr:idc:esv:*\",\"fr:idm:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\",\"fr:idc:ws:admin\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"GIyq6foAjk7VGtM7NyJQZMEUxtAgSe02sjjgp4ey4go\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"rBa78YjWw5-Hkd2rP8uuY2fikjMf9FVeP2AUabFL2qqgVCJxs035yKQDlMAYAFnKaSUXME0vXhZKNkP5ZsWdYAl_sS-0o8HBO4AQk8dXSB--NnkPd0S-6c-sb01oy5tet1WFiKI8dfhzH9KZ65oy3ouzaSsnTjIpFQNMVaq1qQE3m2gPnmwMoRQZdP_hClkXMTtkdRapTL_cdxw7tYGGwpjFz2IJRX-fjFpE79NZdQ_dUaeWOm3tnoHAHjh01IrFu7qlT0o5Bf7-gDvoXU3eYAy5D9LcZAeXr8DiEqK-2aBltV43JSk-Z119DQhRUOFOVMlfbZzHYcWlMgPHBnneleAzChhaDnTxd3NGfqF329wfxQHUaGdj7-eVlXEEYIxmzVwFOiEK0ogEtyvkrlYqQiarxSGt1teNShBpb2QtKL4UPLh7ufxe6K961QuL-FmCkKbjGFxYY0PTegeIsf3rYTNKJRpADC9rGPDF67c5yuMbbBZU9G_GRq5Lj8yS5vG94oCM7PGmKzxxavS7neBu0BH6cqn_u6kuvbfcLtmszo7JqMnY6SqPIp0PU1wfizkjeXKG0s_6rtqQ57pH5IpZTUYwCrtkqcOLEColrUwort43MY12P-ELDuq-IaZFRxJWn8A9dqplVJzOQViUfHHtTVu5W2KiumLSXsxWUsQTb8E\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:25:35 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": "\"4773460a-f4b4-4472-a12b-8c7b7ad4fd76-9686\"" + }, + { + "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": "1408" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000" + } + ], + "headersSize": 657, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:25:35.806Z", + "time": 161, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 161 + } + }, + { + "_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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1992, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/810dd2f4-874b-4aad-9e0a-f8a57789f182?_fields=%2A" + }, + "response": { + "bodySize": 1408, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1408, + "text": "{\"_id\":\"810dd2f4-874b-4aad-9e0a-f8a57789f182\",\"_rev\":\"4773460a-f4b4-4472-a12b-8c7b7ad4fd76-9686\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1773261131370\",\"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:dataset:*\",\"fr:idc:esv:*\",\"fr:idm:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\",\"fr:idc:ws:admin\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"GIyq6foAjk7VGtM7NyJQZMEUxtAgSe02sjjgp4ey4go\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"rBa78YjWw5-Hkd2rP8uuY2fikjMf9FVeP2AUabFL2qqgVCJxs035yKQDlMAYAFnKaSUXME0vXhZKNkP5ZsWdYAl_sS-0o8HBO4AQk8dXSB--NnkPd0S-6c-sb01oy5tet1WFiKI8dfhzH9KZ65oy3ouzaSsnTjIpFQNMVaq1qQE3m2gPnmwMoRQZdP_hClkXMTtkdRapTL_cdxw7tYGGwpjFz2IJRX-fjFpE79NZdQ_dUaeWOm3tnoHAHjh01IrFu7qlT0o5Bf7-gDvoXU3eYAy5D9LcZAeXr8DiEqK-2aBltV43JSk-Z119DQhRUOFOVMlfbZzHYcWlMgPHBnneleAzChhaDnTxd3NGfqF329wfxQHUaGdj7-eVlXEEYIxmzVwFOiEK0ogEtyvkrlYqQiarxSGt1teNShBpb2QtKL4UPLh7ufxe6K961QuL-FmCkKbjGFxYY0PTegeIsf3rYTNKJRpADC9rGPDF67c5yuMbbBZU9G_GRq5Lj8yS5vG94oCM7PGmKzxxavS7neBu0BH6cqn_u6kuvbfcLtmszo7JqMnY6SqPIp0PU1wfizkjeXKG0s_6rtqQ57pH5IpZTUYwCrtkqcOLEColrUwort43MY12P-ELDuq-IaZFRxJWn8A9dqplVJzOQViUfHHtTVu5W2KiumLSXsxWUsQTb8E\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:25:35 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": "\"4773460a-f4b4-4472-a12b-8c7b7ad4fd76-9686\"" + }, + { + "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": "1408" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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": "2026-04-10T14:25:35.932Z", + "time": 69, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 69 + } + }, + { + "_id": "cffcfbec868c6d577abdd6dfb2546c66", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 179, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "179" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1963, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"cluster\",\"enabled\":true,\"instanceCheckInInterval\":5000,\"instanceCheckInOffset\":0,\"instanceId\":\"&{openidm.node.id}\",\"instanceRecoveryTimeout\":30000,\"instanceTimeout\":30000}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/cluster" + }, + "response": { + "bodySize": 179, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 179, + "text": "{\"_id\":\"cluster\",\"enabled\":true,\"instanceCheckInInterval\":5000,\"instanceCheckInOffset\":0,\"instanceId\":\"&{openidm.node.id}\",\"instanceRecoveryTimeout\":30000,\"instanceTimeout\":30000}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:25:38 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "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": "179" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-39d10143-abcd-40f9-bdb3-3de5b55aa46a" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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": "2026-04-10T14:25:38.306Z", + "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/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_m_314327836/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_m_314327836/am_1076162899/recording.har new file mode 100644 index 000000000..396acb161 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_m_314327836/am_1076162899/recording.har @@ -0,0 +1,788 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_D_m/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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1c1bf69b-4fcc-4602-8355-b51681221f1f" + }, + { + "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": 370, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://platform.dev.trivir.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 587, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 587, + "text": "{\"_id\":\"*\",\"_rev\":\"2075994313\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"iPlanetDirectoryPro\",\"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\":[],\"nodeDesignerXuiEnabled\":true}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:24:33 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "587" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "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": "\"2075994313\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 631, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:24:33.199Z", + "time": 14, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 14 + } + }, + { + "_id": "9f5671275c36a1c0090d0df26ce0e93f", + "_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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1c1bf69b-4fcc-4602-8355-b51681221f1f" + }, + { + "name": "accept-api-version", + "value": "resource=2.0, protocol=1.0" + }, + { + "name": "x-openam-username", + "value": "amadmin" + }, + { + "name": "x-openam-password", + "value": "41ghjnKpNFAFU/HXw82HbFbitYNOOJ0g" + }, + { + "name": "content-length", + "value": "2" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 497, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{}" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/am/json/realms/root/authenticate" + }, + "response": { + "bodySize": 167, + "content": { + "mimeType": "application/json", + "size": 167, + "text": "{\"tokenId\":\"\",\"successUrl\":\"/am/console\",\"realm\":\"/\"}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + }, + { + "httpOnly": true, + "name": "iPlanetDirectoryPro", + "path": "/", + "sameSite": "none", + "secure": true, + "value": "" + }, + { + "httpOnly": true, + "name": "amlbcookie", + "path": "/", + "sameSite": "none", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:24:33 GMT" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "content-length", + "value": "167" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "iPlanetDirectoryPro=; Path=/; Secure; HttpOnly; SameSite=none" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "amlbcookie=; Path=/; Secure; HttpOnly; SameSite=none" + }, + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=2.1" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 693, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:24:33.219Z", + "time": 23, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 23 + } + }, + { + "_id": "6a3744385d3fd7416ea7089e610fa7e7", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 128, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1c1bf69b-4fcc-4602-8355-b51681221f1f" + }, + { + "name": "accept-api-version", + "value": "resource=4.0" + }, + { + "name": "content-length", + "value": "128" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 424, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"tokenId\":\"\"}" + }, + "queryString": [ + { + "name": "_action", + "value": "getSessionInfo" + } + ], + "url": "https://platform.dev.trivir.com/am/json/realms/root/sessions/?_action=getSessionInfo" + }, + "response": { + "bodySize": 290, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 290, + "text": "{\"username\":\"amadmin\",\"universalId\":\"id=amadmin,ou=user,ou=am-config\",\"realm\":\"/\",\"latestAccessTime\":\"2026-04-10T14:24:33Z\",\"maxIdleExpirationTime\":\"2026-04-10T14:54:33Z\",\"maxSessionExpirationTime\":\"2026-04-10T16:24:32Z\",\"properties\":{\"AMCtxId\":\"1c8847ad-8353-47c9-95b8-b2d96aa72c02-6997\"}}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:24:33 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "290" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "private" + }, + { + "name": "content-api-version", + "value": "resource=4.0" + }, + { + "name": "content-security-policy", + "value": "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": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 610, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:24:33.250Z", + "time": 7, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 7 + } + }, + { + "_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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1c1bf69b-4fcc-4602-8355-b51681221f1f" + }, + { + "name": "accept-api-version", + "value": "resource=1.0" + }, + { + "name": "cookie", + "value": "iPlanetDirectoryPro=" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 520, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://platform.dev.trivir.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 257, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 257, + "text": "{\"_id\":\"version\",\"_rev\":\"-466575464\",\"version\":\"8.0.1\",\"fullVersion\":\"ForgeRock Access Management 8.0.1 Build b59bc0908346197b0c33afcb9e733d0400feeea1 (2025-April-15 11:37)\",\"revision\":\"b59bc0908346197b0c33afcb9e733d0400feeea1\",\"date\":\"2025-April-15 11:37\"}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:24:33 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "257" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "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": "\"-466575464\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 631, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:24:33.265Z", + "time": 9, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 9 + } + }, + { + "_id": "c2c11ca1286e189f91800b1ed00c6e7b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1c1bf69b-4fcc-4602-8355-b51681221f1f" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "cookie", + "value": "iPlanetDirectoryPro=" + }, + { + "name": "content-length", + "value": "25" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 605, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"\",\"enabled\":true}" + }, + "queryString": [], + "url": "https://platform.dev.trivir.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": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:24:33 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "148" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "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": "\"1077208638\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 630, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:24:33.359Z", + "time": 22, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 22 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_m_314327836/oauth2_393036114/recording.har similarity index 86% rename from test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/oauth2_393036114/recording.har rename to test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_m_314327836/oauth2_393036114/recording.har index cdc50808c..a52143556 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/oauth2_393036114/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_m_314327836/oauth2_393036114/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "config-manager/push/raw/0_f_D_m/oauth2", + "_recordingName": "config-manager/push/raw/0_D_m/oauth2", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -25,11 +25,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-30" + "value": "@rockcarver/frodo-lib/4.0.0-34" }, { "name": "x-forgerock-transactionid", - "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + "value": "frodo-1c1bf69b-4fcc-4602-8355-b51681221f1f" }, { "name": "accept-api-version", @@ -58,7 +58,7 @@ "postData": { "mimeType": "application/x-www-form-urlencoded", "params": [], - "text": "redirect_uri=https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html&scope=fr:idm:* openid&response_type=code&client_id=idm-admin-ui&csrf=o0lZEEfrBWAeylthTNhlktvrIYw.*AAJTSQACMDIAAlNLABxGRkNOR0dHZTZBRWgyS1RhWFVXdmhYNG9ZZkE9AAR0eXBlAANDVFMAAlMxAAIwMQ..*&decision=allow&code_challenge=E4uA0amd_23J-z6NGTDPItPKGG3eN4qhGB9sTnjrf40&code_challenge_method=S256" + "text": "redirect_uri=https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html&scope=fr:idm:* openid&response_type=code&client_id=idm-admin-ui&csrf=05Rw3VDzoQwKFp-Z1MKMUv0iURA.*AAJTSQACMDIAAlNLABxZMHJrYnhVdzV3TjhiaDRUenNndWR0Zkk0djg9AAR0eXBlAANDVFMAAlMxAAIwMQ..*&decision=allow&code_challenge=PpNciTtWnOACNiLdsyjJ2Zf3Kkm2dE5T3oHaoH5655w&code_challenge_method=S256" }, "queryString": [], "url": "https://platform.dev.trivir.com/am/oauth2/authorize" @@ -90,7 +90,7 @@ "headers": [ { "name": "date", - "value": "Mon, 23 Mar 2026 13:45:38 GMT" + "value": "Fri, 10 Apr 2026 14:24:33 GMT" }, { "name": "content-length", @@ -124,7 +124,7 @@ }, { "name": "location", - "value": "https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html?code=D7k-twSZq0ENVUPu7SATAk0I4AM&iss=https%3A%2F%2Fplatform.dev.trivir.com%2Fam%2Foauth2&client_id=idm-admin-ui" + "value": "https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html?code=FmFt1SnJyqJhMdkI-RNxheR1s3E&iss=https%3A%2F%2Fplatform.dev.trivir.com%2Fam%2Foauth2&client_id=idm-admin-ui" }, { "name": "pragma", @@ -137,12 +137,12 @@ ], "headersSize": 673, "httpVersion": "HTTP/1.1", - "redirectURL": "https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html?code=D7k-twSZq0ENVUPu7SATAk0I4AM&iss=https%3A%2F%2Fplatform.dev.trivir.com%2Fam%2Foauth2&client_id=idm-admin-ui", + "redirectURL": "https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html?code=FmFt1SnJyqJhMdkI-RNxheR1s3E&iss=https%3A%2F%2Fplatform.dev.trivir.com%2Fam%2Foauth2&client_id=idm-admin-ui", "status": 302, "statusText": "Found" }, - "startedDateTime": "2026-03-23T13:45:37.871Z", - "time": 70, + "startedDateTime": "2026-04-10T14:24:33.281Z", + "time": 18, "timings": { "blocked": -1, "connect": -1, @@ -150,7 +150,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 70 + "wait": 18 } }, { @@ -171,11 +171,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-30" + "value": "@rockcarver/frodo-lib/4.0.0-34" }, { "name": "x-forgerock-transactionid", - "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + "value": "frodo-1c1bf69b-4fcc-4602-8355-b51681221f1f" }, { "name": "accept-api-version", @@ -200,16 +200,16 @@ "postData": { "mimeType": "application/x-www-form-urlencoded", "params": [], - "text": "client_id=idm-admin-ui&redirect_uri=https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html&grant_type=authorization_code&code=D7k-twSZq0ENVUPu7SATAk0I4AM&code_verifier=2XoLSm5cBqpRoCF6XefxSL5q8-zaw8q_CBQnH-l7f64" + "text": "client_id=idm-admin-ui&redirect_uri=https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html&grant_type=authorization_code&code=FmFt1SnJyqJhMdkI-RNxheR1s3E&code_verifier=l4hIwv9zYXKiOp789G5yUCPEw9Dj-TOKIn8wemme1QM" }, "queryString": [], "url": "https://platform.dev.trivir.com/am/oauth2/access_token" }, "response": { - "bodySize": 1250, + "bodySize": 1247, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 1250, + "size": 1247, "text": "{\"access_token\":\"\",\"scope\":\"openid fr:idm:*\",\"id_token\":\"\",\"token_type\":\"Bearer\",\"expires_in\":239}" }, "cookies": [ @@ -224,7 +224,7 @@ "headers": [ { "name": "date", - "value": "Mon, 23 Mar 2026 13:45:38 GMT" + "value": "Fri, 10 Apr 2026 14:24:33 GMT" }, { "name": "content-type", @@ -232,7 +232,7 @@ }, { "name": "content-length", - "value": "1250" + "value": "1247" }, { "name": "connection", @@ -270,8 +270,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-03-23T13:45:37.948Z", - "time": 40, + "startedDateTime": "2026-04-10T14:24:33.306Z", + "time": 46, "timings": { "blocked": -1, "connect": -1, @@ -279,7 +279,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 40 + "wait": 46 } } ], diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_m_314327836/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_m_314327836/openidm_3290118515/recording.har new file mode 100644 index 000000000..a3cdd5ebd --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_D_m_314327836/openidm_3290118515/recording.har @@ -0,0 +1,167 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_D_m/openidm", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "cffcfbec868c6d577abdd6dfb2546c66", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 179, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-1c1bf69b-4fcc-4602-8355-b51681221f1f" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "179" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 410, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"cluster\",\"enabled\":true,\"instanceCheckInInterval\":5000,\"instanceCheckInOffset\":0,\"instanceId\":\"&{openidm.node.id}\",\"instanceRecoveryTimeout\":30000,\"instanceTimeout\":30000}" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/openidm/config/cluster" + }, + "response": { + "bodySize": 179, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 179, + "text": "{\"_id\":\"cluster\",\"enabled\":true,\"instanceCheckInInterval\":5000,\"instanceCheckInOffset\":0,\"instanceId\":\"&{openidm.node.id}\",\"instanceRecoveryTimeout\":30000,\"instanceTimeout\":30000}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/openidm", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:24:33 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "content-length", + "value": "179" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/openidm; Secure; HttpOnly" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "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": "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": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 637, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:24:33.387Z", + "time": 26, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 26 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/am_1076162899/recording.har new file mode 100644 index 000000000..a80ca461f --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/am_1076162899/recording.har @@ -0,0 +1,468 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_p_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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "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": 388, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 615, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 615, + "text": "{\"_id\":\"*\",\"_rev\":\"1955877839\",\"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,\"oauth2AIAgentsEnabled\":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": "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": "\"1955877839\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "615" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:26:07 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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": "2026-04-10T14:26:07.485Z", + "time": 113, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 113 + } + }, + { + "_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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "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": 1980, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 276, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 276, + "text": "{\"_id\":\"version\",\"_rev\":\"-1876078088\",\"version\":\"9.0.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 9.0.0-SNAPSHOT Build 2a2686af9631bd8d8866c92ea2411814899acefd (2026-March-30 15:23)\",\"revision\":\"2a2686af9631bd8d8866c92ea2411814899acefd\",\"date\":\"2026-March-30 15:23\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-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": "\"-1876078088\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "276" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:26:07 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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": "2026-04-10T14:26:07.730Z", + "time": 85, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 85 + } + }, + { + "_id": "c2c11ca1286e189f91800b1ed00c6e7b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "25" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 2065, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"\",\"enabled\":true}" + }, + "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-security-policy", + "value": "default-src '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": "Fri, 10 Apr 2026 14:26:08 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 751, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:26:07.971Z", + "time": 87, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 87 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/environment_1072573434/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/environment_1072573434/recording.har new file mode 100644 index 000000000..aae227f78 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/environment_1072573434/recording.har @@ -0,0 +1,461 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_p_D/environment", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ccc7ec61c2094114d7917814bb19b83b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 0, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "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": 1931, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/scopes/service-accounts" + }, + "response": { + "bodySize": 1975, + "content": { + "mimeType": "application/json; charset=utf-8", + "size": 1975, + "text": "[{\"scope\":\"fr:am:*\",\"description\":\"All Access Management APIs\"},{\"scope\":\"fr:autoaccess:*\",\"description\":\"All Auto Access APIs\"},{\"scope\":\"fr:idc:analytics:*\",\"description\":\"All Analytics APIs\"},{\"scope\":\"fr:idc:certificate:*\",\"description\":\"All TLS certificate APIs\",\"childScopes\":[{\"scope\":\"fr:idc:certificate:read\",\"description\":\"Read TLS certificates\"}]},{\"scope\":\"fr:idc:content-security-policy:*\",\"description\":\"All content security policy APIs\",\"childScopes\":[{\"scope\":\"fr:idc:content-security-policy:read\",\"description\":\"Read content security policy\"}]},{\"scope\":\"fr:idc:cookie-domain:*\",\"description\":\"All cookie domain APIs\",\"childScopes\":[{\"scope\":\"fr:idc:cookie-domain:read\",\"description\":\"Read cookie domains\"}]},{\"scope\":\"fr:idc:custom-domain:*\",\"description\":\"All custom domain APIs\",\"childScopes\":[{\"scope\":\"fr:idc:custom-domain:read\",\"description\":\"Read custom domains\"}]},{\"scope\":\"fr:idc:dataset:*\",\"description\":\"All dataset deletion APIs\",\"childScopes\":[{\"scope\":\"fr:idc:dataset:read\",\"description\":\"Read dataset deletions\"}]},{\"scope\":\"fr:idc:esv:*\",\"description\":\"All ESV APIs\",\"childScopes\":[{\"scope\":\"fr:idc:esv:read\",\"description\":\"Read ESVs, excluding values of secrets\"},{\"scope\":\"fr:idc:esv:update\",\"description\":\"Create, modify, and delete ESVs\"},{\"scope\":\"fr:idc:esv:restart\",\"description\":\"Restart workloads that consume ESVs\"}]},{\"scope\":\"fr:idc:promotion:*\",\"description\":\"All configuration promotion APIs\",\"childScopes\":[{\"scope\":\"fr:idc:promotion:read\",\"description\":\"Read configuration promotion\"}]},{\"scope\":\"fr:idc:release:*\",\"description\":\"All product release APIs\",\"childScopes\":[{\"scope\":\"fr:idc:release:read\",\"description\":\"Read product release\"}]},{\"scope\":\"fr:idc:sso-cookie:*\",\"description\":\"All SSO cookie APIs\",\"childScopes\":[{\"scope\":\"fr:idc:sso-cookie:read\",\"description\":\"Read SSO cookie\"}]},{\"scope\":\"fr:idc:ws:admin\",\"description\":\"All PingFederate APIs\"},{\"scope\":\"fr:idm:*\",\"description\":\"All Identity Management APIs\"}]" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "1975" + }, + { + "name": "etag", + "value": "W/\"7b7-9oeZSONSS8Sn+SSr15TXAygvvcE\"" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:26:07 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "7b169609-9b5a-4a45-a458-e3306058ca9d" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 413, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:26:07.821Z", + "time": 67, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 67 + } + }, + { + "_id": "69c1d0a43379f655fa92ab92629fb532", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 129, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "129" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1964, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"esv-frodo-test-variable-1\",\"description\":\"description1\",\"expressionType\":\"string\",\"loaded\":true,\"valueBase64\":\"dmFsdWUx\"}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/variables/esv-frodo-test-variable-1" + }, + "response": { + "bodySize": 218, + "content": { + "mimeType": "application/json", + "size": 218, + "text": "{\"_id\":\"esv-frodo-test-variable-1\",\"description\":\"description1\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-03-11T21:03:06.985865Z\",\"lastChangedBy\":\"Frodo-SA-1773261131370\",\"loaded\":true,\"valueBase64\":\"dmFsdWUx\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:26:08 GMT" + }, + { + "name": "content-length", + "value": "218" + }, + { + "name": "x-forgerock-transactionid", + "value": "0c9ad8c2-da19-4607-a230-c8d9fe0717c8" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 325, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:26:08.065Z", + "time": 611, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 611 + } + }, + { + "_id": "eb68eff0f22a05a39c721d73aaad3c9a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 122, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "122" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1964, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"esv-frodo-test-variable-2\",\"description\":\"description2\",\"expressionType\":\"int\",\"loaded\":true,\"valueBase64\":\"NDI=\"}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/variables/esv-frodo-test-variable-2" + }, + "response": { + "bodySize": 211, + "content": { + "mimeType": "application/json", + "size": 211, + "text": "{\"_id\":\"esv-frodo-test-variable-2\",\"description\":\"description2\",\"expressionType\":\"int\",\"lastChangeDate\":\"2026-03-11T21:03:09.552101Z\",\"lastChangedBy\":\"Frodo-SA-1773261131370\",\"loaded\":true,\"valueBase64\":\"NDI=\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:26:09 GMT" + }, + { + "name": "content-length", + "value": "211" + }, + { + "name": "x-forgerock-transactionid", + "value": "8a190a20-e660-41ed-9eab-7fc4014de733" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 325, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:26:08.682Z", + "time": 567, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 567 + } + }, + { + "_id": "4f5e1685abe644c49ec3829a96027374", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 113, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "113" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1956, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"esv-test-variable\",\"description\":\"test\",\"expressionType\":\"string\",\"loaded\":true,\"valueBase64\":\"dGVzdA==\"}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/variables/esv-test-variable" + }, + "response": { + "bodySize": 197, + "content": { + "mimeType": "application/json", + "size": 197, + "text": "{\"_id\":\"esv-test-variable\",\"description\":\"test\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-03-25T21:11:19.814977Z\",\"lastChangedBy\":\"phales@trivir.com\",\"loaded\":true,\"valueBase64\":\"dGVzdA==\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:26:10 GMT" + }, + { + "name": "content-length", + "value": "197" + }, + { + "name": "x-forgerock-transactionid", + "value": "487ab716-4030-4299-8c21-8ccfef22ee39" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 325, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:26:09.255Z", + "time": 942, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 942 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/oauth2_393036114/recording.har new file mode 100644 index 000000000..c919d078a --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/oauth2_393036114/recording.har @@ -0,0 +1,146 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_p_D/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1362, + "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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1362" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 443, + "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:ws:admin fr:am:* fr:autoaccess:* fr:idc:esv:* 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:dataset:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1884, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1884, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:ws:admin fr:am:* fr:autoaccess:* fr:idc:esv:* 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:dataset:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-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": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1884" + }, + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:26:07 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 561, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:26:07.612Z", + "time": 112, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 112 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/openidm_3290118515/recording.har new file mode 100644 index 000000000..9da595070 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_924270795/openidm_3290118515/recording.har @@ -0,0 +1,462 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_p_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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1992, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/810dd2f4-874b-4aad-9e0a-f8a57789f182?_fields=%2A" + }, + "response": { + "bodySize": 1408, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1408, + "text": "{\"_id\":\"810dd2f4-874b-4aad-9e0a-f8a57789f182\",\"_rev\":\"4773460a-f4b4-4472-a12b-8c7b7ad4fd76-9686\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1773261131370\",\"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:dataset:*\",\"fr:idc:esv:*\",\"fr:idm:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\",\"fr:idc:ws:admin\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"GIyq6foAjk7VGtM7NyJQZMEUxtAgSe02sjjgp4ey4go\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"rBa78YjWw5-Hkd2rP8uuY2fikjMf9FVeP2AUabFL2qqgVCJxs035yKQDlMAYAFnKaSUXME0vXhZKNkP5ZsWdYAl_sS-0o8HBO4AQk8dXSB--NnkPd0S-6c-sb01oy5tet1WFiKI8dfhzH9KZ65oy3ouzaSsnTjIpFQNMVaq1qQE3m2gPnmwMoRQZdP_hClkXMTtkdRapTL_cdxw7tYGGwpjFz2IJRX-fjFpE79NZdQ_dUaeWOm3tnoHAHjh01IrFu7qlT0o5Bf7-gDvoXU3eYAy5D9LcZAeXr8DiEqK-2aBltV43JSk-Z119DQhRUOFOVMlfbZzHYcWlMgPHBnneleAzChhaDnTxd3NGfqF329wfxQHUaGdj7-eVlXEEYIxmzVwFOiEK0ogEtyvkrlYqQiarxSGt1teNShBpb2QtKL4UPLh7ufxe6K961QuL-FmCkKbjGFxYY0PTegeIsf3rYTNKJRpADC9rGPDF67c5yuMbbBZU9G_GRq5Lj8yS5vG94oCM7PGmKzxxavS7neBu0BH6cqn_u6kuvbfcLtmszo7JqMnY6SqPIp0PU1wfizkjeXKG0s_6rtqQ57pH5IpZTUYwCrtkqcOLEColrUwort43MY12P-ELDuq-IaZFRxJWn8A9dqplVJzOQViUfHHtTVu5W2KiumLSXsxWUsQTb8E\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:26: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": "\"4773460a-f4b4-4472-a12b-8c7b7ad4fd76-9686\"" + }, + { + "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": "1408" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000" + } + ], + "headersSize": 657, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:26:07.770Z", + "time": 152, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 152 + } + }, + { + "_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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1992, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/managed/svcacct/810dd2f4-874b-4aad-9e0a-f8a57789f182?_fields=%2A" + }, + "response": { + "bodySize": 1408, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1408, + "text": "{\"_id\":\"810dd2f4-874b-4aad-9e0a-f8a57789f182\",\"_rev\":\"4773460a-f4b4-4472-a12b-8c7b7ad4fd76-9686\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1773261131370\",\"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:dataset:*\",\"fr:idc:esv:*\",\"fr:idm:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\",\"fr:idc:ws:admin\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"GIyq6foAjk7VGtM7NyJQZMEUxtAgSe02sjjgp4ey4go\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"rBa78YjWw5-Hkd2rP8uuY2fikjMf9FVeP2AUabFL2qqgVCJxs035yKQDlMAYAFnKaSUXME0vXhZKNkP5ZsWdYAl_sS-0o8HBO4AQk8dXSB--NnkPd0S-6c-sb01oy5tet1WFiKI8dfhzH9KZ65oy3ouzaSsnTjIpFQNMVaq1qQE3m2gPnmwMoRQZdP_hClkXMTtkdRapTL_cdxw7tYGGwpjFz2IJRX-fjFpE79NZdQ_dUaeWOm3tnoHAHjh01IrFu7qlT0o5Bf7-gDvoXU3eYAy5D9LcZAeXr8DiEqK-2aBltV43JSk-Z119DQhRUOFOVMlfbZzHYcWlMgPHBnneleAzChhaDnTxd3NGfqF329wfxQHUaGdj7-eVlXEEYIxmzVwFOiEK0ogEtyvkrlYqQiarxSGt1teNShBpb2QtKL4UPLh7ufxe6K961QuL-FmCkKbjGFxYY0PTegeIsf3rYTNKJRpADC9rGPDF67c5yuMbbBZU9G_GRq5Lj8yS5vG94oCM7PGmKzxxavS7neBu0BH6cqn_u6kuvbfcLtmszo7JqMnY6SqPIp0PU1wfizkjeXKG0s_6rtqQ57pH5IpZTUYwCrtkqcOLEColrUwort43MY12P-ELDuq-IaZFRxJWn8A9dqplVJzOQViUfHHtTVu5W2KiumLSXsxWUsQTb8E\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:26: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": "\"4773460a-f4b4-4472-a12b-8c7b7ad4fd76-9686\"" + }, + { + "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": "1408" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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": "2026-04-10T14:26:07.896Z", + "time": 68, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 68 + } + }, + { + "_id": "cffcfbec868c6d577abdd6dfb2546c66", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 179, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "179" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1963, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"cluster\",\"enabled\":true,\"instanceCheckInInterval\":5000,\"instanceCheckInOffset\":0,\"instanceId\":\"&{openidm.node.id}\",\"instanceRecoveryTimeout\":30000,\"instanceTimeout\":30000}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/openidm/config/cluster" + }, + "response": { + "bodySize": 179, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 179, + "text": "{\"_id\":\"cluster\",\"enabled\":true,\"instanceCheckInInterval\":5000,\"instanceCheckInOffset\":0,\"instanceId\":\"&{openidm.node.id}\",\"instanceRecoveryTimeout\":30000,\"instanceTimeout\":30000}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:26:10 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "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": "179" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2253d75a-6415-433a-878b-023e7194a4fd" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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": "2026-04-10T14:26:10.203Z", + "time": 71, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 71 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_m_3145161795/am_1076162899/recording.har similarity index 74% rename from test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/am_1076162899/recording.har rename to test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_m_3145161795/am_1076162899/recording.har index 6a4f87ce1..ad66e65d1 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/am_1076162899/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_m_3145161795/am_1076162899/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "config-manager/push/raw/0_f_D_m/am", + "_recordingName": "config-manager/push/raw/0_p_D_m/am", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -25,11 +25,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-30" + "value": "@rockcarver/frodo-lib/4.0.0-34" }, { "name": "x-forgerock-transactionid", - "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + "value": "frodo-c52c9d02-b9d7-4f17-af37-b979ac40dd63" }, { "name": "accept-api-version", @@ -69,7 +69,7 @@ "headers": [ { "name": "date", - "value": "Mon, 23 Mar 2026 13:45:37 GMT" + "value": "Fri, 10 Apr 2026 14:25:00 GMT" }, { "name": "content-type", @@ -139,8 +139,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-03-23T13:45:37.776Z", - "time": 28, + "startedDateTime": "2026-04-10T14:24:59.988Z", + "time": 10, "timings": { "blocked": -1, "connect": -1, @@ -148,7 +148,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 28 + "wait": 10 } }, { @@ -169,11 +169,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-30" + "value": "@rockcarver/frodo-lib/4.0.0-34" }, { "name": "x-forgerock-transactionid", - "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + "value": "frodo-c52c9d02-b9d7-4f17-af37-b979ac40dd63" }, { "name": "accept-api-version", @@ -246,7 +246,7 @@ "headers": [ { "name": "date", - "value": "Mon, 23 Mar 2026 13:45:37 GMT" + "value": "Fri, 10 Apr 2026 14:25:00 GMT" }, { "name": "content-type", @@ -310,8 +310,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-03-23T13:45:37.811Z", - "time": 24, + "startedDateTime": "2026-04-10T14:25:00.004Z", + "time": 18, "timings": { "blocked": -1, "connect": -1, @@ -319,7 +319,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 24 + "wait": 18 } }, { @@ -340,11 +340,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-30" + "value": "@rockcarver/frodo-lib/4.0.0-34" }, { "name": "x-forgerock-transactionid", - "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + "value": "frodo-c52c9d02-b9d7-4f17-af37-b979ac40dd63" }, { "name": "accept-api-version", @@ -380,11 +380,11 @@ "url": "https://platform.dev.trivir.com/am/json/realms/root/sessions/?_action=getSessionInfo" }, "response": { - "bodySize": 292, + "bodySize": 290, "content": { "mimeType": "application/json;charset=UTF-8", - "size": 292, - "text": "{\"username\":\"amadmin\",\"universalId\":\"id=amadmin,ou=user,ou=am-config\",\"realm\":\"/\",\"latestAccessTime\":\"2026-03-23T13:45:37Z\",\"maxIdleExpirationTime\":\"2026-03-23T14:15:37Z\",\"maxSessionExpirationTime\":\"2026-03-23T15:45:36Z\",\"properties\":{\"AMCtxId\":\"43ba9500-5021-4093-850b-dc18b8548553-102102\"}}" + "size": 290, + "text": "{\"username\":\"amadmin\",\"universalId\":\"id=amadmin,ou=user,ou=am-config\",\"realm\":\"/\",\"latestAccessTime\":\"2026-04-10T14:25:00Z\",\"maxIdleExpirationTime\":\"2026-04-10T14:55:00Z\",\"maxSessionExpirationTime\":\"2026-04-10T16:24:59Z\",\"properties\":{\"AMCtxId\":\"1c8847ad-8353-47c9-95b8-b2d96aa72c02-7097\"}}" }, "cookies": [ { @@ -398,7 +398,7 @@ "headers": [ { "name": "date", - "value": "Mon, 23 Mar 2026 13:45:37 GMT" + "value": "Fri, 10 Apr 2026 14:25:00 GMT" }, { "name": "content-type", @@ -406,7 +406,7 @@ }, { "name": "content-length", - "value": "292" + "value": "290" }, { "name": "connection", @@ -464,8 +464,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-03-23T13:45:37.843Z", - "time": 5, + "startedDateTime": "2026-04-10T14:25:00.028Z", + "time": 7, "timings": { "blocked": -1, "connect": -1, @@ -473,7 +473,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 5 + "wait": 7 } }, { @@ -494,11 +494,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-30" + "value": "@rockcarver/frodo-lib/4.0.0-34" }, { "name": "x-forgerock-transactionid", - "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + "value": "frodo-c52c9d02-b9d7-4f17-af37-b979ac40dd63" }, { "name": "accept-api-version", @@ -542,7 +542,7 @@ "headers": [ { "name": "date", - "value": "Mon, 23 Mar 2026 13:45:37 GMT" + "value": "Fri, 10 Apr 2026 14:25:00 GMT" }, { "name": "content-type", @@ -612,7 +612,7 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-03-23T13:45:37.856Z", + "startedDateTime": "2026-04-10T14:25:00.042Z", "time": 6, "timings": { "blocked": -1, @@ -623,6 +623,163 @@ "ssl": -1, "wait": 6 } + }, + { + "_id": "c2c11ca1286e189f91800b1ed00c6e7b", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 25, + "cookies": [], + "headers": [ + { + "name": "accept", + "value": "application/json, text/plain, */*" + }, + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "user-agent", + "value": "@rockcarver/frodo-lib/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-c52c9d02-b9d7-4f17-af37-b979ac40dd63" + }, + { + "name": "accept-api-version", + "value": "protocol=2.0,resource=1.0" + }, + { + "name": "cookie", + "value": "iPlanetDirectoryPro=" + }, + { + "name": "content-length", + "value": "25" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 605, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"_id\":\"\",\"enabled\":true}" + }, + "queryString": [], + "url": "https://platform.dev.trivir.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": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:25:00 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "148" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "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": "\"1077208638\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 630, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:25:00.130Z", + "time": 14, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 14 + } } ], "pages": [], diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_m_3145161795/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_m_3145161795/oauth2_393036114/recording.har new file mode 100644 index 000000000..aa7d62778 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_m_3145161795/oauth2_393036114/recording.har @@ -0,0 +1,289 @@ +{ + "log": { + "_recordingName": "config-manager/push/raw/0_p_D_m/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "a684e2f67fd67a4263878c3124af167a", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 365, + "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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-c52c9d02-b9d7-4f17-af37-b979ac40dd63" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "cookie", + "value": "iPlanetDirectoryPro=" + }, + { + "name": "content-length", + "value": "365" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 565, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "redirect_uri=https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html&scope=fr:idm:* openid&response_type=code&client_id=idm-admin-ui&csrf=kYUw6ObbU5xhI91Vz6LUMmUv0FU.*AAJTSQACMDIAAlNLABwzcVp1aC9rUmJ2YnRrQ09Tek5heVhDVUxsTGs9AAR0eXBlAANDVFMAAlMxAAIwMQ..*&decision=allow&code_challenge=NnU5ABBrsKcIt6YzTJnBybqTcqwOwVpwpiTrAsgIlTI&code_challenge_method=S256" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/am/oauth2/authorize" + }, + "response": { + "bodySize": 0, + "content": { + "mimeType": "text/plain", + "size": 0 + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + }, + { + "expires": "1970-01-01T00:00:00.000Z", + "httpOnly": true, + "name": "OAUTH_REQUEST_ATTRIBUTES", + "path": "/", + "sameSite": "none", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:25:00 GMT" + }, + { + "name": "content-length", + "value": "0" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "OAUTH_REQUEST_ATTRIBUTES=; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Path=/; Secure; HttpOnly; SameSite=none" + }, + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "x-content-type-options", + "value": "nosniff" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "location", + "value": "https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html?code=p7KVoe2MU1zn1IDjVQOMNuLdEGg&iss=https%3A%2F%2Fplatform.dev.trivir.com%2Fam%2Foauth2&client_id=idm-admin-ui" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 673, + "httpVersion": "HTTP/1.1", + "redirectURL": "https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html?code=p7KVoe2MU1zn1IDjVQOMNuLdEGg&iss=https%3A%2F%2Fplatform.dev.trivir.com%2Fam%2Foauth2&client_id=idm-admin-ui", + "status": 302, + "statusText": "Found" + }, + "startedDateTime": "2026-04-10T14:25:00.056Z", + "time": 18, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 18 + } + }, + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 224, + "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/4.0.0-34" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-c52c9d02-b9d7-4f17-af37-b979ac40dd63" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "224" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 424, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "client_id=idm-admin-ui&redirect_uri=https://platform.dev.trivir.com/platform/appAuthHelperRedirect.html&grant_type=authorization_code&code=p7KVoe2MU1zn1IDjVQOMNuLdEGg&code_verifier=lOeIyiMXAhqIkYN3J41K1ochQ-yqrpw6PddLJw3UIgE" + }, + "queryString": [], + "url": "https://platform.dev.trivir.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1247, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1247, + "text": "{\"access_token\":\"\",\"scope\":\"openid fr:idm:*\",\"id_token\":\"\",\"token_type\":\"Bearer\",\"expires_in\":239}" + }, + "cookies": [ + { + "httpOnly": true, + "name": "route", + "path": "/am", + "secure": true, + "value": "" + } + ], + "headers": [ + { + "name": "date", + "value": "Fri, 10 Apr 2026 14:25:00 GMT" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "1247" + }, + { + "name": "connection", + "value": "keep-alive" + }, + { + "_fromType": "array", + "name": "set-cookie", + "value": "route=; Path=/am; Secure; HttpOnly" + }, + { + "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": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains" + } + ], + "headersSize": 405, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-04-10T14:25:00.081Z", + "time": 43, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 43 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_m_3145161795/openidm_3290118515/recording.har similarity index 54% rename from test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/openidm_3290118515/recording.har rename to test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_m_3145161795/openidm_3290118515/recording.har index 3aa80b2f0..cac22a7c6 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_f_D_m_2699374093/openidm_3290118515/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/raw_1140790001/0_p_D_m_3145161795/openidm_3290118515/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "config-manager/push/raw/0_f_D_m/openidm", + "_recordingName": "config-manager/push/raw/0_p_D_m/openidm", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -8,11 +8,11 @@ }, "entries": [ { - "_id": "e5d4aec279b6a0c039410eba6fbae96a", + "_id": "cffcfbec868c6d577abdd6dfb2546c66", "_order": 0, "cache": {}, "request": { - "bodySize": 1140, + "bodySize": 179, "cookies": [], "headers": [ { @@ -25,11 +25,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-30" + "value": "@rockcarver/frodo-lib/4.0.0-34" }, { "name": "x-forgerock-transactionid", - "value": "frodo-44d153d1-990f-4300-acd7-f4dd50f0ac82" + "value": "frodo-c52c9d02-b9d7-4f17-af37-b979ac40dd63" }, { "name": "authorization", @@ -37,7 +37,7 @@ }, { "name": "content-length", - "value": "1140" + "value": "179" }, { "name": "accept-encoding", @@ -48,23 +48,23 @@ "value": "openam-frodo-dev.forgeblocks.com" } ], - "headersSize": 418, + "headersSize": 410, "httpVersion": "HTTP/1.1", "method": "PUT", "postData": { "mimeType": "application/json", "params": [], - "text": "{\"_id\":\"authentication\",\"rsFilter\":{\"anonymousUserMapping\":{\"executeAugmentationScript\":false,\"localUser\":\"internal/user/anonymous\",\"roles\":[\"internal/role/openidm-reg\"]},\"augmentSecurityContext\":{\"source\":\"require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, 'privileges', 'privilegeAssignments');\",\"type\":\"text/javascript\"},\"cache\":{\"maxTimeout\":\"300 seconds\"},\"clientId\":\"idm-resource-server\",\"clientSecret\":\"&{rs.client.secret|password}\",\"scopes\":[\"fr:idm:*\"],\"staticUserMapping\":[{\"executeAugmentationScript\":false,\"localUser\":\"internal/user/openidm-admin\",\"roles\":[\"internal/role/openidm-authorized\",\"internal/role/openidm-admin\"],\"subject\":\"amadmin\"},{\"executeAugmentationScript\":false,\"localUser\":\"internal/user/idm-provisioning\",\"roles\":[\"internal/role/openidm-admin\"],\"subject\":\"idm-provisioning\"}],\"subjectMapping\":[{\"additionalUserFields\":[\"adminOfOrg\",\"ownerOfOrg\"],\"defaultRoles\":[\"internal/role/openidm-authorized\"],\"propertyMapping\":{\"sub\":\"_id\"},\"queryOnResource\":\"managed/user\",\"userRoles\":\"authzRoles/*\"}],\"tokenIntrospectUrl\":\"http://am/am/oauth2/introspect\"}}" + "text": "{\"_id\":\"cluster\",\"enabled\":true,\"instanceCheckInInterval\":5000,\"instanceCheckInOffset\":0,\"instanceId\":\"&{openidm.node.id}\",\"instanceRecoveryTimeout\":30000,\"instanceTimeout\":30000}" }, "queryString": [], - "url": "https://platform.dev.trivir.com/openidm/config/authentication" + "url": "https://platform.dev.trivir.com/openidm/config/cluster" }, "response": { - "bodySize": 1140, + "bodySize": 179, "content": { "mimeType": "application/json;charset=utf-8", - "size": 1140, - "text": "{\"_id\":\"authentication\",\"rsFilter\":{\"anonymousUserMapping\":{\"executeAugmentationScript\":false,\"localUser\":\"internal/user/anonymous\",\"roles\":[\"internal/role/openidm-reg\"]},\"augmentSecurityContext\":{\"source\":\"require('auth/orgPrivileges').assignPrivilegesToUser(resource, security, properties, subjectMapping, privileges, 'privileges', 'privilegeAssignments');\",\"type\":\"text/javascript\"},\"cache\":{\"maxTimeout\":\"300 seconds\"},\"clientId\":\"idm-resource-server\",\"clientSecret\":\"&{rs.client.secret|password}\",\"scopes\":[\"fr:idm:*\"],\"staticUserMapping\":[{\"executeAugmentationScript\":false,\"localUser\":\"internal/user/openidm-admin\",\"roles\":[\"internal/role/openidm-authorized\",\"internal/role/openidm-admin\"],\"subject\":\"amadmin\"},{\"executeAugmentationScript\":false,\"localUser\":\"internal/user/idm-provisioning\",\"roles\":[\"internal/role/openidm-admin\"],\"subject\":\"idm-provisioning\"}],\"subjectMapping\":[{\"additionalUserFields\":[\"adminOfOrg\",\"ownerOfOrg\"],\"defaultRoles\":[\"internal/role/openidm-authorized\"],\"propertyMapping\":{\"sub\":\"_id\"},\"queryOnResource\":\"managed/user\",\"userRoles\":\"authzRoles/*\"}],\"tokenIntrospectUrl\":\"http://am/am/oauth2/introspect\"}}" + "size": 179, + "text": "{\"_id\":\"cluster\",\"enabled\":true,\"instanceCheckInInterval\":5000,\"instanceCheckInOffset\":0,\"instanceId\":\"&{openidm.node.id}\",\"instanceRecoveryTimeout\":30000,\"instanceTimeout\":30000}" }, "cookies": [ { @@ -78,7 +78,7 @@ "headers": [ { "name": "date", - "value": "Mon, 23 Mar 2026 13:45:38 GMT" + "value": "Fri, 10 Apr 2026 14:25:00 GMT" }, { "name": "content-type", @@ -86,7 +86,7 @@ }, { "name": "content-length", - "value": "1140" + "value": "179" }, { "name": "connection", @@ -142,14 +142,14 @@ "value": "max-age=31536000; includeSubDomains" } ], - "headersSize": 638, + "headersSize": 637, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-03-23T13:45:37.996Z", - "time": 57, + "startedDateTime": "2026-04-10T14:25:00.150Z", + "time": 23, "timings": { "blocked": -1, "connect": -1, @@ -157,7 +157,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 57 + "wait": 23 } } ], From 19a5146df9365342940e0c0866d2e8e01066c3e3 Mon Sep 17 00:00:00 2001 From: Dallin Sevy Date: Thu, 18 Jun 2026 15:01:49 -0600 Subject: [PATCH 3/3] update FrConfigRawOps to use readToJson and loadEnvFile to resolve placeholder --- src/configManagerOps/FrConfigRawOps.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/configManagerOps/FrConfigRawOps.ts b/src/configManagerOps/FrConfigRawOps.ts index 45b89d95c..16d55591d 100644 --- a/src/configManagerOps/FrConfigRawOps.ts +++ b/src/configManagerOps/FrConfigRawOps.ts @@ -5,7 +5,7 @@ import { readFile } from 'fs/promises'; import { printError, verboseMessage } from '../utils/Console'; -const { getFilePath, saveJsonToFile } = frodo.utils; +const { getFilePath, saveJsonToFile, readToJson, loadEnvFile } = frodo.utils; const { exportRawConfig, importRawConfig } = frodo.rawConfig; /** @@ -43,6 +43,7 @@ export async function configManagerExportRaw(file: string): Promise { export async function configManagerImportRaw(path?: string): Promise { try { const rawDir = getFilePath('raw/'); + const envFile = loadEnvFile() const files = getJsonFiles(rawDir); for (const filePath of files) { const rawPath = filePath @@ -52,7 +53,7 @@ export async function configManagerImportRaw(path?: string): Promise { if (path && !rawPath.startsWith(path)) { continue; } - const data = JSON.parse(fs.readFileSync(filePath, 'utf-8')); + const data = readToJson(filePath, { envFile, base64Encode: false}) if (data.result && Array.isArray(data.result)) { for (const item of data.result) { delete item._rev;