From b3c5d44c0fab0f803f9f65f1208a6f5596321fc9 Mon Sep 17 00:00:00 2001 From: Dallin Sevy Date: Thu, 18 Jun 2026 10:20:52 -0600 Subject: [PATCH 1/6] add -V flag for env value --- src/cli/FrodoCommand.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/cli/FrodoCommand.ts b/src/cli/FrodoCommand.ts index 5636393af..f2fefa715 100644 --- a/src/cli/FrodoCommand.ts +++ b/src/cli/FrodoCommand.ts @@ -523,6 +523,14 @@ const directoryOption = withHelpGroup( RUNTIME_OPTIONS_HEADING ); +const environmentOption = withHelpGroup( + new Option( + '-V, --env ', + 'Value to use for the placeholder. Overrides .env files and environment variables' + ).default(undefined, 'undefined'), + RUNTIME_OPTIONS_HEADING +); + const insecureOption = withHelpGroup( new Option( '-k, --insecure', @@ -623,6 +631,7 @@ const defaultOpts = [ amsterPrivateKeyFileOption, deploymentOption, directoryOption, + environmentOption, insecureOption, verboseOption, debugOption, From 0e1d643431b0dcd0f7e35d6365825055f0d1b950 Mon Sep 17 00:00:00 2001 From: Huston Franklin Date: Sun, 25 Jun 2023 15:20:06 -0600 Subject: [PATCH 2/6] feat: Add config-manager push variables --- .../config-manager-push-variables.ts | 51 ++ .../config-manager-push.ts | 4 +- src/configManagerOps/FrConfigVariableOps.ts | 37 +- ...config-manager-push-variables.test.js.snap | 66 ++ .../config-manager-push.test.js.snap | 1 + .../en/config-manager-push-variables.test.js | 10 + ...ig-manager-push-variables.e2e.test.js.snap | 5 + .../config-manager-push-variables.e2e.test.js | 73 ++ .../variables/esv-welcomehub-api-host.json | 6 + .../am_1076162899/recording.har | 312 +++++++ .../environment_1072573434/recording.har | 237 +++++ .../oauth2_393036114/recording.har | 146 ++++ .../openidm_3290118515/recording.har | 310 +++++++ .../mocks/default_2470140894/recording.har | 815 ++++++++++++++++++ 14 files changed, 2070 insertions(+), 3 deletions(-) create mode 100644 src/cli/config-manager/config-manager-push/config-manager-push-variables.ts create mode 100644 test/client_cli/en/__snapshots__/config-manager-push-variables.test.js.snap create mode 100644 test/client_cli/en/config-manager-push-variables.test.js create mode 100644 test/e2e/__snapshots__/config-manager-push-variables.e2e.test.js.snap create mode 100644 test/e2e/config-manager-push-variables.e2e.test.js create mode 100644 test/e2e/exports/fr-config-manager/forgeops/esvs/variables/esv-welcomehub-api-host.json create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/am_1076162899/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/environment_1072573434/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/oauth2_393036114/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/openidm_3290118515/recording.har create mode 100644 test/e2e/mocks/default_2470140894/recording.har diff --git a/src/cli/config-manager/config-manager-push/config-manager-push-variables.ts b/src/cli/config-manager/config-manager-push/config-manager-push-variables.ts new file mode 100644 index 000000000..055638bbc --- /dev/null +++ b/src/cli/config-manager/config-manager-push/config-manager-push-variables.ts @@ -0,0 +1,51 @@ +import { frodo } from '@rockcarver/frodo-lib'; + +import { configManagerImportVariables } from '../../../configManagerOps/FrConfigVariableOps'; +import { getTokens } from '../../../ops/AuthenticateOps'; +import { printMessage, verboseMessage } 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 variables', + deploymentTypes + ); + + program + .description('Import variables objects.') + .action(async (host, realm, user, password, options, command) => { + command.handleDefaultArgsAndOpts( + host, + realm, + user, + password, + options, + command + ); + + if (await getTokens(false, true, deploymentTypes)) { + verboseMessage('Importing variables'); + const outcome = await configManagerImportVariables(); + if (!outcome) process.exitCode = 1; + } + // unrecognized combination of options or no options + else { + printMessage( + 'Unrecognized combination of options or no options...', + 'error' + ); + program.help(); + process.exitCode = 1; + } + }); + + return program; +} diff --git a/src/cli/config-manager/config-manager-push/config-manager-push.ts b/src/cli/config-manager/config-manager-push/config-manager-push.ts index cf423832d..744cf481d 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 @@ -18,7 +18,7 @@ import ServiceObjects from './config-manager-push-service-objects'; import TermsAndConditions from './config-manager-push-terms-and-conditions'; import Themes from './config-manager-push-themes'; import UiConfig from './config-manager-push-ui-config'; - +import Variables from './config-manager-push-variables'; export default function setup() { const program = new FrodoStubCommand('push').description( 'Import configuration optimized for CI/CD pipelines (format compatible with fr-config-manager).' @@ -43,6 +43,6 @@ export default function setup() { program.addCommand(UiConfig().name('ui-config')); program.addCommand(Authentication().name('authentication')); program.addCommand(ConnectorDefinitions().name('connector-definitions')); - + program.addCommand(Variables().name('variables')); return program; } diff --git a/src/configManagerOps/FrConfigVariableOps.ts b/src/configManagerOps/FrConfigVariableOps.ts index b4ed54637..b8f999b72 100644 --- a/src/configManagerOps/FrConfigVariableOps.ts +++ b/src/configManagerOps/FrConfigVariableOps.ts @@ -1,5 +1,7 @@ import { frodo } from '@rockcarver/frodo-lib'; import { VariableSkeleton } from '@rockcarver/frodo-lib/types/api/cloud/VariablesApi'; +import { VariablesExportInterface } from '@rockcarver/frodo-lib/types/ops/cloud/VariablesOps'; +import fs from 'fs'; import { createProgressIndicator, @@ -10,7 +12,7 @@ import { import { escapePlaceholders, esvToEnv } from '../utils/FrConfig'; const { getFilePath, saveJsonToFile } = frodo.utils; -const { readVariables } = frodo.cloud.variable; +const { readVariables, importVariable } = frodo.cloud.variable; /** * Export all variables to seperate files @@ -71,3 +73,36 @@ export async function configManagerExportVariables(): Promise { } return false; } + +/** + * Import variables to tenant + * @returns {Promise} true if successful, false otherwise + */ +export async function configManagerImportVariables(): Promise { + try { + const variablesDir = getFilePath('esvs/variables'); + const variablesFiles = fs.readdirSync(variablesDir); + + for (const variablesFile of variablesFiles) { + const filePath = `${variablesDir}/${variablesFile}`; + const readFile = fs.readFileSync(filePath, 'utf-8'); + const importData = JSON.parse(readFile); + + if (importData.valueBase64) { + importData.valueBase64 = Buffer.from(importData.valueBase64).toString( + 'base64' + ); + } + + const singleVariableImport: VariablesExportInterface = { + variable: { [importData._id]: importData }, + }; + await importVariable(importData._id, singleVariableImport); + } + + return true; + } catch (error) { + printError(error); + } + return false; +} diff --git a/test/client_cli/en/__snapshots__/config-manager-push-variables.test.js.snap b/test/client_cli/en/__snapshots__/config-manager-push-variables.test.js.snap new file mode 100644 index 000000000..9eff9f503 --- /dev/null +++ b/test/client_cli/en/__snapshots__/config-manager-push-variables.test.js.snap @@ -0,0 +1,66 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CLI help interface for 'config-manager push variables' should be expected english 1`] = ` +"Usage: frodo config-manager push variables [options] [host] [realm] [username] [password] + +Import variables objects. + +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. + --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. + +" +`; 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..caa67558b 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 @@ -33,5 +33,6 @@ Commands: terms-and-conditions [Experimental] Import terms and conditions. themes [Experimental] Import themes. ui-config [Experimental] Import UI configuration. + variables Import variables objects. " `; diff --git a/test/client_cli/en/config-manager-push-variables.test.js b/test/client_cli/en/config-manager-push-variables.test.js new file mode 100644 index 000000000..65246a5ee --- /dev/null +++ b/test/client_cli/en/config-manager-push-variables.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 variables --help'; +const { stdout } = await exec(CMD); + +test("CLI help interface for 'config-manager push variables' should be expected english", async () => { + expect(stdout).toMatchSnapshot(); +}); \ No newline at end of file diff --git a/test/e2e/__snapshots__/config-manager-push-variables.e2e.test.js.snap b/test/e2e/__snapshots__/config-manager-push-variables.e2e.test.js.snap new file mode 100644 index 000000000..2cb570f59 --- /dev/null +++ b/test/e2e/__snapshots__/config-manager-push-variables.e2e.test.js.snap @@ -0,0 +1,5 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`frodo config-manager push variables "frodo config-manager push variables -D test/e2e/exports/fr-config-manager/forgeops -m forgeops": should import the variables into cloud" 1`] = `""`; + +exports[`frodo config-manager push variables "frodo config-manager push variables -D test/e2e/exports/fr-config-manager/forgeops -m forgeops": should import the variables into cloud" 2`] = `""`; diff --git a/test/e2e/config-manager-push-variables.e2e.test.js b/test/e2e/config-manager-push-variables.e2e.test.js new file mode 100644 index 000000000..61ffaabba --- /dev/null +++ b/test/e2e/config-manager-push-variables.e2e.test.js @@ -0,0 +1,73 @@ +/** + * 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 variables -D test/e2e/exports/fr-config-manager/forgeops -m cloud +*/ + +import cp from 'child_process'; +import { promisify } from 'util'; +import { getEnv, removeAnsiEscapeCodes } from './utils/TestUtils'; +import { connection as c } from './utils/TestConfig'; + +const exec = promisify(cp.exec); + +process.env['FRODO_MOCK'] = '1'; +const cloudEnv = getEnv(c); + +const allDirectory = "test/e2e/exports/fr-config-manager/forgeops"; + +describe('frodo config-manager push variables', () => { + test(`"frodo config-manager push variables -D ${allDirectory} -m forgeops": should import the variables into cloud"`, async () => { + const CMD = `frodo config-manager push variables -D ${allDirectory} -m cloud`; + 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/forgeops/esvs/variables/esv-welcomehub-api-host.json b/test/e2e/exports/fr-config-manager/forgeops/esvs/variables/esv-welcomehub-api-host.json new file mode 100644 index 000000000..a37b4786c --- /dev/null +++ b/test/e2e/exports/fr-config-manager/forgeops/esvs/variables/esv-welcomehub-api-host.json @@ -0,0 +1,6 @@ +{ + "_id": "esv-welcomehub-api-host", + "description": "", + "expressionType": "string", + "valueBase64": "${ESV_WELCOMEHUB_API_HOST}" +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/am_1076162899/recording.har new file mode 100644 index 000000000..715695a64 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/am_1076162899/recording.har @@ -0,0 +1,312 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/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-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ae13a3ab-2d8f-4577-90b7-d2e5131d7983" + }, + { + "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": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-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": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Mon, 16 Mar 2026 17:35:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ae13a3ab-2d8f-4577-90b7-d2e5131d7983" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-03-16T17:35:40.054Z", + "time": 135, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 135 + } + }, + { + "_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-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ae13a3ab-2d8f-4577-90b7-d2e5131d7983" + }, + { + "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": 1959, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 280, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 280, + "text": "{\"_id\":\"version\",\"_rev\":\"103025458\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 363328899230d72a7c5f4fdd6cafc3675d109ccd (2026-February-13 10:03)\",\"revision\":\"363328899230d72a7c5f4fdd6cafc3675d109ccd\",\"date\":\"2026-February-13 10:03\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-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": "\"103025458\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "280" + }, + { + "name": "date", + "value": "Mon, 16 Mar 2026 17:35:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ae13a3ab-2d8f-4577-90b7-d2e5131d7983" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 786, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-16T17:35:40.342Z", + "time": 69, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 69 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/environment_1072573434/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/environment_1072573434/recording.har new file mode 100644 index 000000000..770d27404 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/environment_1072573434/recording.har @@ -0,0 +1,237 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/0_D_m/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-22" + }, + { + "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": 1910, + "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": "Mon, 16 Mar 2026 17:35:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "6d6f5cae-8697-414d-9081-8dae91463d50" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-03-16T17:35:40.418Z", + "time": 77, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 77 + } + }, + { + "_id": "d734762288d4b4d3581cb317b66a8f28", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 97, + "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-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "97" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1940, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"JHtFU1ZfV0VMQ09NRUhVQl9BUElfSE9TVH0=\",\"description\":\"\",\"expressionType\":\"string\"}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/variables/esv-welcomehub-api-host" + }, + "response": { + "bodySize": 232, + "content": { + "mimeType": "application/json", + "size": 232, + "text": "{\"_id\":\"esv-welcomehub-api-host\",\"description\":\"\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-03-16T15:35:54.009865Z\",\"lastChangedBy\":\"Frodo-SA-1773261131370\",\"loaded\":true,\"valueBase64\":\"JHtFU1ZfV0VMQ09NRUhVQl9BUElfSE9TVH0=\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Mon, 16 Mar 2026 17:35:41 GMT" + }, + { + "name": "content-length", + "value": "232" + }, + { + "name": "x-forgerock-transactionid", + "value": "3fa73413-ebd5-43e9-88ba-758c51dfa70c" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-03-16T17:35:40.562Z", + "time": 929, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 929 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/oauth2_393036114/recording.har new file mode 100644 index 000000000..67d3f2dff --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/oauth2_393036114/recording.har @@ -0,0 +1,146 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/0_D_m/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-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ae13a3ab-2d8f-4577-90b7-d2e5131d7983" + }, + { + "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": 1863, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1863, + "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": "1863" + }, + { + "name": "date", + "value": "Mon, 16 Mar 2026 17:35:40 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ae13a3ab-2d8f-4577-90b7-d2e5131d7983" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-03-16T17:35:40.202Z", + "time": 134, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 134 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/openidm_3290118515/recording.har new file mode 100644 index 000000000..153c4fd4d --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_m_314327836/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/0_D_m/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-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ae13a3ab-2d8f-4577-90b7-d2e5131d7983" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1971, + "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": "Mon, 16 Mar 2026 17:35:40 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"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-ae13a3ab-2d8f-4577-90b7-d2e5131d7983" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-03-16T17:35:40.386Z", + "time": 120, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 120 + } + }, + { + "_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-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-ae13a3ab-2d8f-4577-90b7-d2e5131d7983" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1971, + "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": "Mon, 16 Mar 2026 17:35:40 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"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-ae13a3ab-2d8f-4577-90b7-d2e5131d7983" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-03-16T17:35:40.501Z", + "time": 54, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 54 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/default_2470140894/recording.har b/test/e2e/mocks/default_2470140894/recording.har new file mode 100644 index 000000000..e832c113d --- /dev/null +++ b/test/e2e/mocks/default_2470140894/recording.har @@ -0,0 +1,815 @@ +{ + "log": { + "_recordingName": "default", + "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-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2a5e4c2b-e621-42b1-802c-a11ac61c6b56" + }, + { + "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": 585, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 585, + "text": "{\"_id\":\"*\",\"_rev\":\"-494299414\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"6ac6499e9da2071\",\"secureCookie\":true,\"forgotPassword\":\"false\",\"forgotUsername\":\"false\",\"kbaEnabled\":\"false\",\"selfRegistration\":\"false\",\"lang\":\"en-US\",\"successfulUserRegistrationDestination\":\"default\",\"socialImplementations\":[],\"referralsEnabled\":\"false\",\"zeroPageLogin\":{\"enabled\":false,\"refererWhitelist\":[],\"allowedWithoutReferer\":true},\"realm\":\"/\",\"xuiUserSessionValidationEnabled\":true,\"fileBasedConfiguration\":true,\"userIdAttributes\":[],\"cloudOnlyFeaturesEnabled\":true}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-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": "\"-494299414\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "585" + }, + { + "name": "date", + "value": "Mon, 16 Mar 2026 17:29:50 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2a5e4c2b-e621-42b1-802c-a11ac61c6b56" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-03-16T17:29:50.592Z", + "time": 132, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 132 + } + }, + { + "_id": "78361416e653d47d9ac14be2ef215c8c", + "_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-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2a5e4c2b-e621-42b1-802c-a11ac61c6b56" + }, + { + "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": 1863, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1863, + "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": "1863" + }, + { + "name": "date", + "value": "Mon, 16 Mar 2026 17:29:50 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2a5e4c2b-e621-42b1-802c-a11ac61c6b56" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-03-16T17:29:50.738Z", + "time": 129, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 129 + } + }, + { + "_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-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2a5e4c2b-e621-42b1-802c-a11ac61c6b56" + }, + { + "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": 1959, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 280, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 280, + "text": "{\"_id\":\"version\",\"_rev\":\"103025458\",\"version\":\"8.1.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 8.1.0-SNAPSHOT Build 363328899230d72a7c5f4fdd6cafc3675d109ccd (2026-February-13 10:03)\",\"revision\":\"363328899230d72a7c5f4fdd6cafc3675d109ccd\",\"date\":\"2026-February-13 10:03\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-security-policy-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": "\"103025458\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "280" + }, + { + "name": "date", + "value": "Mon, 16 Mar 2026 17:29:50 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2a5e4c2b-e621-42b1-802c-a11ac61c6b56" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 786, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-03-16T17:29:50.873Z", + "time": 72, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 72 + } + }, + { + "_id": "3631cfb75061a35339b442a95d4f2fb2", + "_order": 0, + "cache": {}, + "request": { + "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-22" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-2a5e4c2b-e621-42b1-802c-a11ac61c6b56" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1971, + "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": "Mon, 16 Mar 2026 17:29:51 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-2a5e4c2b-e621-42b1-802c-a11ac61c6b56" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-03-16T17:29:50.918Z", + "time": 130, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 130 + } + }, + { + "_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-22" + }, + { + "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": 1910, + "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": "Mon, 16 Mar 2026 17:29:50 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "9c6246f5-f777-4cc4-9cd6-9ccd231a4549" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-03-16T17:29:50.952Z", + "time": 64, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 64 + } + }, + { + "_id": "d734762288d4b4d3581cb317b66a8f28", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 97, + "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-22" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "97" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1940, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"JHtFU1ZfV0VMQ09NRUhVQl9BUElfSE9TVH0=\",\"description\":\"\",\"expressionType\":\"string\"}" + }, + "queryString": [], + "url": "https://openam-frodo-dev.forgeblocks.com/environment/variables/esv-welcomehub-api-host" + }, + "response": { + "bodySize": 232, + "content": { + "mimeType": "application/json", + "size": 232, + "text": "{\"_id\":\"esv-welcomehub-api-host\",\"description\":\"\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-03-16T15:35:54.009865Z\",\"lastChangedBy\":\"Frodo-SA-1773261131370\",\"loaded\":true,\"valueBase64\":\"JHtFU1ZfV0VMQ09NRUhVQl9BUElfSE9TVH0=\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Mon, 16 Mar 2026 17:29:51 GMT" + }, + { + "name": "content-length", + "value": "232" + }, + { + "name": "x-forgerock-transactionid", + "value": "883efe4d-bc50-4514-925c-480848ca3a2b" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-03-16T17:29:51.096Z", + "time": 828, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 828 + } + } + ], + "pages": [], + "version": "1.2" + } +} From 457750349e7d0a1bfaaf136af38427d64583cd30 Mon Sep 17 00:00:00 2001 From: Dallin Sevy Date: Wed, 10 Jun 2026 15:00:11 -0600 Subject: [PATCH 3/6] add placeholder resolution and .env support for imports --- .../config-manager-push-variables.ts | 26 +- .../config-manager-push.ts | 1 + src/configManagerOps/FrConfigVariableOps.ts | 164 +++++++- ...config-manager-push-variables.test.js.snap | 73 +--- .../config-manager-push.test.js.snap | 2 +- ...ig-manager-push-variables.e2e.test.js.snap | 18 +- .../config-manager-push-variables.e2e.test.js | 15 +- .../esv-connector-timeout-reset-counter.json | 6 + .../esvs/variables/esv-email-welcome.json | 6 + .../am_1076162899/recording.har | 312 ++++++++++++++++ .../environment_1072573434/recording.har | 349 ++++++++++++++++++ .../oauth2_393036114/recording.har | 146 ++++++++ .../openidm_3290118515/recording.har | 310 ++++++++++++++++ .../am_1076162899/recording.har | 312 ++++++++++++++++ .../environment_1072573434/recording.har | 237 ++++++++++++ .../oauth2_393036114/recording.har | 146 ++++++++ .../openidm_3290118515/recording.har | 310 ++++++++++++++++ 17 files changed, 2347 insertions(+), 86 deletions(-) create mode 100644 test/e2e/exports/fr-config-manager/cloud/esvs/variables/esv-connector-timeout-reset-counter.json create mode 100644 test/e2e/exports/fr-config-manager/cloud/esvs/variables/esv-email-welcome.json create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/am_1076162899/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/environment_1072573434/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/oauth2_393036114/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/openidm_3290118515/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/am_1076162899/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/environment_1072573434/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/oauth2_393036114/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/openidm_3290118515/recording.har diff --git a/src/cli/config-manager/config-manager-push/config-manager-push-variables.ts b/src/cli/config-manager/config-manager-push/config-manager-push-variables.ts index 055638bbc..b2538adff 100644 --- a/src/cli/config-manager/config-manager-push/config-manager-push-variables.ts +++ b/src/cli/config-manager/config-manager-push/config-manager-push-variables.ts @@ -1,4 +1,5 @@ import { frodo } from '@rockcarver/frodo-lib'; +import { Option } from 'commander'; import { configManagerImportVariables } from '../../../configManagerOps/FrConfigVariableOps'; import { getTokens } from '../../../ops/AuthenticateOps'; @@ -7,20 +8,30 @@ 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 variables', + [], deploymentTypes ); - program - .description('Import variables objects.') + .description('Import variables.') + .addOption( + new Option( + '-n, --name ', + 'Variable name; import only the specified variable. If omitted, all variables are imported.' + ) + ) + .addOption( + new Option( + '-e, --env ', + 'Value to set for the variable. Overrides .env files and environment variables.' + ) + ) .action(async (host, realm, user, password, options, command) => { command.handleDefaultArgsAndOpts( host, @@ -30,10 +41,12 @@ export default function setup() { options, command ); - if (await getTokens(false, true, deploymentTypes)) { verboseMessage('Importing variables'); - const outcome = await configManagerImportVariables(); + const outcome = await configManagerImportVariables( + options.name, + options.env + ); if (!outcome) process.exitCode = 1; } // unrecognized combination of options or no options @@ -46,6 +59,5 @@ export default function setup() { 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 744cf481d..2fcdf1094 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 @@ -19,6 +19,7 @@ import TermsAndConditions from './config-manager-push-terms-and-conditions'; import Themes from './config-manager-push-themes'; import UiConfig from './config-manager-push-ui-config'; import Variables from './config-manager-push-variables'; + export default function setup() { const program = new FrodoStubCommand('push').description( 'Import configuration optimized for CI/CD pipelines (format compatible with fr-config-manager).' diff --git a/src/configManagerOps/FrConfigVariableOps.ts b/src/configManagerOps/FrConfigVariableOps.ts index b8f999b72..155151eb9 100644 --- a/src/configManagerOps/FrConfigVariableOps.ts +++ b/src/configManagerOps/FrConfigVariableOps.ts @@ -1,4 +1,4 @@ -import { frodo } from '@rockcarver/frodo-lib'; +import { frodo, FrodoError } from '@rockcarver/frodo-lib'; import { VariableSkeleton } from '@rockcarver/frodo-lib/types/api/cloud/VariablesApi'; import { VariablesExportInterface } from '@rockcarver/frodo-lib/types/ops/cloud/VariablesOps'; import fs from 'fs'; @@ -74,35 +74,165 @@ export async function configManagerExportVariables(): Promise { return false; } +export function loadEnvFile(): Record { + const envPath = getFilePath('.env'); + + if (!fs.existsSync(envPath)) { + return {}; + } + + const out: Record = {}; + const contents = fs.readFileSync(envPath, 'utf8'); + + for (const rawLine of contents.split('\n')) { + const line = rawLine.trim(); + + if (!line || line.startsWith('#')) { + continue; + } + + const eq = line.indexOf('='); + + if (eq === -1) { + continue; + } + + const key = line.slice(0, eq).trim(); + let value = line.slice(eq + 1).trim(); + + if ( + (value.startsWith('"') && value.endsWith('"')) || + (value.startsWith("'") && value.endsWith("'")) + ) { + value = value.slice(1, -1); + } + if (key) { + out[key] = value; + } + } + return out; +} + +export function resolvePlaceholder( + placeholder: string, + + envFile: Record = {} +): string { + const match = placeholder.match(/^\$\{(BASE64:)?(.+)\}$/); + + if (!match) { + throw new FrodoError(`Invalid placeholder format: ${placeholder}`); + } + + const isBase64 = !!match[1]; + const name = match[2]; + let value: string; + + if (name in envFile) { + value = envFile[name]; + } else if (name in process.env) { + value = process.env[name]; + } else { + throw new FrodoError(`No value found for ${name}`); + } + + return isBase64 ? value : Buffer.from(value).toString('base64'); +} /** * Import variables to tenant * @returns {Promise} true if successful, false otherwise */ -export async function configManagerImportVariables(): Promise { +export async function configManagerImportVariables( + variableName?: string, + value?: string +): Promise { + const errors = []; + const spinnerId = createProgressIndicator( + 'indeterminate', + 0, + `Reading variables...` + ); + let indicatorId: string; try { - const variablesDir = getFilePath('esvs/variables'); - const variablesFiles = fs.readdirSync(variablesDir); + const variablesDir = getFilePath(`esvs/variables/`); + if (!fs.existsSync(variablesDir)) { + stopProgressIndicator(spinnerId, `No variables found`, 'fail'); + return true; + } + + const files = fs + .readdirSync(variablesDir) + .filter((name) => name.toLowerCase().endsWith('.json')) + .map((name) => + JSON.parse(fs.readFileSync(`${variablesDir}/${name}`, 'utf8')) + ) + .filter((data) => !variableName || data._id === variableName); + + if (files.length === 0) { + stopProgressIndicator( + spinnerId, + variableName + ? `No matching variable found for ${variableName}` + : 'No variables found to import', + 'fail' + ); + return true; + } + + stopProgressIndicator( + spinnerId, + `Successfully read ${files.length} variables.`, + 'success' + ); + + const envFile = loadEnvFile(); + + indicatorId = createProgressIndicator( + 'determinate', + files.length, + 'Importing variables' + ); + + for (const importData of files) { + try { + if (value) { + importData.valueBase64 = Buffer.from(value).toString('base64'); + } else if (importData.valueBase64) { + importData.valueBase64 = resolvePlaceholder( + importData.valueBase64, + envFile + ); + } else { + throw new FrodoError( + `No value provided for variable ${importData._id}` + ); + } - for (const variablesFile of variablesFiles) { - const filePath = `${variablesDir}/${variablesFile}`; - const readFile = fs.readFileSync(filePath, 'utf-8'); - const importData = JSON.parse(readFile); + if (!importData.expressionType) { + importData.expressionType = 'string'; + } - if (importData.valueBase64) { - importData.valueBase64 = Buffer.from(importData.valueBase64).toString( - 'base64' + const singleVariableImport: VariablesExportInterface = { + variable: { [importData._id]: importData }, + }; + await importVariable(importData._id, singleVariableImport); + updateProgressIndicator( + indicatorId, + `Imported variable ${importData._id}` ); + } catch (error) { + errors.push(error); } - - const singleVariableImport: VariablesExportInterface = { - variable: { [importData._id]: importData }, - }; - await importVariable(importData._id, singleVariableImport); } + if (errors.length > 0) { + throw new FrodoError(`Error importing variables`, errors); + } + stopProgressIndicator(indicatorId, `${files.length} variables imported.`); return true; } catch (error) { + stopProgressIndicator(indicatorId, `Error importing variables`, 'fail'); printError(error); + return false; } - return false; } diff --git a/test/client_cli/en/__snapshots__/config-manager-push-variables.test.js.snap b/test/client_cli/en/__snapshots__/config-manager-push-variables.test.js.snap index 9eff9f503..8bbcaaf32 100644 --- a/test/client_cli/en/__snapshots__/config-manager-push-variables.test.js.snap +++ b/test/client_cli/en/__snapshots__/config-manager-push-variables.test.js.snap @@ -3,64 +3,27 @@ exports[`CLI help interface for 'config-manager push variables' should be expected english 1`] = ` "Usage: frodo config-manager push variables [options] [host] [realm] [username] [password] -Import variables objects. +[Experimental] Import variables. 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. - --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. - + -e, --env Value to set for the variable. Overrides .env files and + environment variables. + -n, --name Variable name; import only the specified variable. If + omitted, all variables are imported. + -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 caa67558b..01000633b 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 @@ -33,6 +33,6 @@ Commands: terms-and-conditions [Experimental] Import terms and conditions. themes [Experimental] Import themes. ui-config [Experimental] Import UI configuration. - variables Import variables objects. + variables [Experimental] Import variables. " `; diff --git a/test/e2e/__snapshots__/config-manager-push-variables.e2e.test.js.snap b/test/e2e/__snapshots__/config-manager-push-variables.e2e.test.js.snap index 2cb570f59..2b22eae83 100644 --- a/test/e2e/__snapshots__/config-manager-push-variables.e2e.test.js.snap +++ b/test/e2e/__snapshots__/config-manager-push-variables.e2e.test.js.snap @@ -1,5 +1,19 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`frodo config-manager push variables "frodo config-manager push variables -D test/e2e/exports/fr-config-manager/forgeops -m forgeops": should import the variables into cloud" 1`] = `""`; +exports[`frodo config-manager push variables "frodo config-manager push variables -D test/e2e/exports/fr-config-manager/cloud ": should import variables into cloud" 1`] = `""`; -exports[`frodo config-manager push variables "frodo config-manager push variables -D test/e2e/exports/fr-config-manager/forgeops -m forgeops": should import the variables into cloud" 2`] = `""`; +exports[`frodo config-manager push variables "frodo config-manager push variables -D test/e2e/exports/fr-config-manager/cloud ": should import variables into cloud" 2`] = ` +"Experimental feature in use: 'frodo config-manager push variables'. This feature may change without notice. +✔ Successfully read 2 variables. +• 2 variables imported. +" +`; + +exports[`frodo config-manager push variables "frodo config-manager push variables -n esv-email-welcome -e "this is a test" -D test/e2e/exports/fr-config-manager/cloud ": should import the specified variable into cloud" 1`] = `""`; + +exports[`frodo config-manager push variables "frodo config-manager push variables -n esv-email-welcome -e "this is a test" -D test/e2e/exports/fr-config-manager/cloud ": should import the specified variable into cloud" 2`] = ` +"Experimental feature in use: 'frodo config-manager push variables'. This feature may change without notice. +✔ Successfully read 2 variables. +• 2 variables imported. +" +`; diff --git a/test/e2e/config-manager-push-variables.e2e.test.js b/test/e2e/config-manager-push-variables.e2e.test.js index 61ffaabba..cee5c6530 100644 --- a/test/e2e/config-manager-push-variables.e2e.test.js +++ b/test/e2e/config-manager-push-variables.e2e.test.js @@ -48,7 +48,8 @@ /* // ForgeOps -FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://nightly.gcp.forgeops.com/am frodo config-manager push variables -D test/e2e/exports/fr-config-manager/forgeops -m cloud +FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://nightly.gcp.forgeops.com/am frodo config-manager push variables -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 variables -n esv-email-welcome -e "this is a test" -D test/e2e/exports/fr-config-manager/cloud */ import cp from 'child_process'; @@ -61,11 +62,17 @@ const exec = promisify(cp.exec); process.env['FRODO_MOCK'] = '1'; const cloudEnv = getEnv(c); -const allDirectory = "test/e2e/exports/fr-config-manager/forgeops"; +const allDirectory = "test/e2e/exports/fr-config-manager/cloud"; describe('frodo config-manager push variables', () => { - test(`"frodo config-manager push variables -D ${allDirectory} -m forgeops": should import the variables into cloud"`, async () => { - const CMD = `frodo config-manager push variables -D ${allDirectory} -m cloud`; + test(`"frodo config-manager push variables -D ${allDirectory} ": should import variables into cloud"`, async () => { + const CMD = `frodo config-manager push variables -D ${allDirectory} `; + const { stdout, stderr } = await exec(CMD, cloudEnv); + expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); + expect(removeAnsiEscapeCodes(stderr)).toMatchSnapshot(); + }); + test(`"frodo config-manager push variables -n esv-email-welcome -e "this is a test" -D ${allDirectory} ": should import the specified variable into cloud"`, async () => { + const CMD = `frodo config-manager push variables -D ${allDirectory} `; const { stdout, stderr } = await exec(CMD, cloudEnv); expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); expect(removeAnsiEscapeCodes(stderr)).toMatchSnapshot(); diff --git a/test/e2e/exports/fr-config-manager/cloud/esvs/variables/esv-connector-timeout-reset-counter.json b/test/e2e/exports/fr-config-manager/cloud/esvs/variables/esv-connector-timeout-reset-counter.json new file mode 100644 index 000000000..4a55aa5e7 --- /dev/null +++ b/test/e2e/exports/fr-config-manager/cloud/esvs/variables/esv-connector-timeout-reset-counter.json @@ -0,0 +1,6 @@ +{ + "_id": "esv-connector-timeout-reset-counter", + "description": "", + "expressionType": "string", + "valueBase64": "${ESV_CONNECTOR_TIMEOUT_RESET_COUNTER}" +} diff --git a/test/e2e/exports/fr-config-manager/cloud/esvs/variables/esv-email-welcome.json b/test/e2e/exports/fr-config-manager/cloud/esvs/variables/esv-email-welcome.json new file mode 100644 index 000000000..dbd9aba9c --- /dev/null +++ b/test/e2e/exports/fr-config-manager/cloud/esvs/variables/esv-email-welcome.json @@ -0,0 +1,6 @@ +{ + "_id": "esv-email-welcome", + "description": "Welcome email template", + "expressionType": "string", + "valueBase64": "${ESV_EMAIL_WELCOME}" +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/am_1076162899/recording.har new file mode 100644 index 000000000..59a657dd3 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/am_1076162899/recording.har @@ -0,0 +1,312 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/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-39" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + }, + { + "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": 398, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 614, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 614, + "text": "{\"_id\":\"*\",\"_rev\":\"959929574\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"311468432e97f1f\",\"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": "content-security-policy", + "value": "frame-ancestors 'self', default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-security-policy-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": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"959929574\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "614" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:45:46 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 804, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T19:45:46.231Z", + "time": 171, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 171 + } + }, + { + "_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-39" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + }, + { + "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": 1926, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 273, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 273, + "text": "{\"_id\":\"version\",\"_rev\":\"1245987628\",\"version\":\"9.0.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 9.0.0-SNAPSHOT Build 96952edaffd9295f1b26b1145ff158e577b2ecb0 (2026-June-02 12:57)\",\"revision\":\"96952edaffd9295f1b26b1145ff158e577b2ecb0\",\"date\":\"2026-June-02 12:57\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-security-policy", + "value": "frame-ancestors 'self', default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-security-policy-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": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1245987628\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "273" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:45:46 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 805, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T19:45:46.594Z", + "time": 121, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 121 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/environment_1072573434/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/environment_1072573434/recording.har new file mode 100644 index 000000000..ee82bb585 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/environment_1072573434/recording.har @@ -0,0 +1,349 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/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-39" + }, + { + "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": 1877, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/scopes/service-accounts" + }, + "response": { + "bodySize": 1910, + "content": { + "mimeType": "application/json; charset=utf-8", + "size": 1910, + "text": "[{\"scope\":\"fr:am:*\",\"description\":\"All Access Management 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:idm:*\",\"description\":\"All Identity Management APIs\"},{\"scope\":\"fr:iga:*\",\"description\":\"All Identity Governance APIs\"}]" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "1910" + }, + { + "name": "etag", + "value": "W/\"776-b2xCO2Gdrqb/5HdcH8WdC8M9zoM\"" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:45:46 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "f02729bc-8a86-4ca9-85be-d3a7b22dfd68" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-06-10T19:45:46.721Z", + "time": 114, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 114 + } + }, + { + "_id": "b411d6d459c1ce2335ab7e6772ef2e04", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 73, + "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-39" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "73" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1919, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"Y291bnQ9MTA=\",\"description\":\"\",\"expressionType\":\"string\"}" + }, + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/variables/esv-connector-timeout-reset-counter" + }, + "response": { + "bodySize": 221, + "content": { + "mimeType": "application/json", + "size": 221, + "text": "{\"_id\":\"esv-connector-timeout-reset-counter\",\"description\":\"\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-06-10T19:31:09.095583Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"valueBase64\":\"Y291bnQ9MTA=\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:45:48 GMT" + }, + { + "name": "content-length", + "value": "221" + }, + { + "name": "x-forgerock-transactionid", + "value": "d8ff26c1-1562-400c-aa48-619b357183f7" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-06-10T19:45:46.964Z", + "time": 1421, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 1421 + } + }, + { + "_id": "9139e133923174901cce4e8f7c145361", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 115, + "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-39" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "115" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1902, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"V2VsY29tZSB0byBvdXIgc2VydmljZQ==\",\"description\":\"Welcome email template\",\"expressionType\":\"string\"}" + }, + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/variables/esv-email-welcome" + }, + "response": { + "bodySize": 245, + "content": { + "mimeType": "application/json", + "size": 245, + "text": "{\"_id\":\"esv-email-welcome\",\"description\":\"Welcome email template\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-06-10T19:44:23.395398Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"valueBase64\":\"V2VsY29tZSB0byBvdXIgc2VydmljZQ==\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:45:49 GMT" + }, + { + "name": "content-length", + "value": "245" + }, + { + "name": "x-forgerock-transactionid", + "value": "34e80493-e600-41ac-a40b-309e8d733404" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-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-06-10T19:45:48.391Z", + "time": 1601, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 1601 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/oauth2_393036114/recording.har new file mode 100644 index 000000000..26f51004b --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/oauth2_393036114/recording.har @@ -0,0 +1,146 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/0_D/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1328, + "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-39" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1328" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 453, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:idc:esv:* fr:idc:content-security-policy:* fr:iga:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1780, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1780, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:idc:esv:* fr:idc:content-security-policy:* fr:iga:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "content-security-policy", + "value": "frame-ancestors 'self'" + }, + { + "name": "content-security-policy-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": "1780" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:45:46 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 581, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T19:45:46.416Z", + "time": 173, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 173 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/openidm_3290118515/recording.har new file mode 100644 index 000000000..eb21a85c8 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/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-39" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1938, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-trivir-fairfax.forgeblocks.com/openidm/managed/svcacct/10d76629-78da-4265-868b-9a0cb68ebdb4?_fields=%2A" + }, + "response": { + "bodySize": 1401, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1401, + "text": "{\"_id\":\"10d76629-78da-4265-868b-9a0cb68ebdb4\",\"_rev\":\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1777919406717\",\"description\":\"dsevy@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:iga:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"hshlr1hlp8bXdLNDrh3rESiHNsMS68c4XtbZX9i_Seg\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"owg6VJta_1o9VqyQk4Xs2kA_BDcyWEN1WMERqaJIFCbtecz_IMBp2G5m76dawbB9QvUsFvMqfJ2OGbaCcfC2o5lkxEu4nxdKLKYZ4-JTGsbPN6j-f9yr0LCjFMPd1BRxKQ98euSu5UZ0_gy9QN-eS4zB5zJsb8E7Y7FXsxG6vgd8dCqCSPjJeSmZhnQEeqJeysGlA5jMzQUP9Lvgm2aZp5wz7DXzF9lvsqRjm49H9wlERjy4KDmjlp5Rr3lz8ZXGgsaIdp18hUrPFKJP5qxkICfnbxdyK858A5puUypj1OAqrOtAnwjk5lMPOYzBWjWV72RPnOY3-6KAHo8uFXK3EH8AN8ErHxhpo-soV0e7-Z7gEnmt0rliY3j_-2AHA0Q5G1k52cGQ-dARGzgAQacpdnQv_pT0k83DGZPrpR6PqBRkyiJBD_PTvySZohxFgjpJfJmkYec7Pg40xri_LN1ozkLRBdQwL2zaQFYtq_VZC20a8Y7NpqpoLcvFIB9W2NS03qTokvId7gdSgdcVmpOo4n7OZZCouD6cyWyJ6Nj9uaxz-mw4Mdzhpd8cclSV_gXeWMBBoW3dZ7zzkEFMWHBT2x9S8JAZor_aaGJ2MXOoNoHRg-q9shNhQ3h7U14MXfL7I9R4ixClZMOpxILa0VT0Vzm-h685xkXwa28WLSw21QU\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:45:46 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": "\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\"" + }, + { + "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": "1401" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + }, + { + "name": "strict-transport-security", + "value": "max-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": 658, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T19:45:46.634Z", + "time": 179, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 179 + } + }, + { + "_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-39" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1938, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-trivir-fairfax.forgeblocks.com/openidm/managed/svcacct/10d76629-78da-4265-868b-9a0cb68ebdb4?_fields=%2A" + }, + "response": { + "bodySize": 1401, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1401, + "text": "{\"_id\":\"10d76629-78da-4265-868b-9a0cb68ebdb4\",\"_rev\":\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1777919406717\",\"description\":\"dsevy@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:iga:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"hshlr1hlp8bXdLNDrh3rESiHNsMS68c4XtbZX9i_Seg\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"owg6VJta_1o9VqyQk4Xs2kA_BDcyWEN1WMERqaJIFCbtecz_IMBp2G5m76dawbB9QvUsFvMqfJ2OGbaCcfC2o5lkxEu4nxdKLKYZ4-JTGsbPN6j-f9yr0LCjFMPd1BRxKQ98euSu5UZ0_gy9QN-eS4zB5zJsb8E7Y7FXsxG6vgd8dCqCSPjJeSmZhnQEeqJeysGlA5jMzQUP9Lvgm2aZp5wz7DXzF9lvsqRjm49H9wlERjy4KDmjlp5Rr3lz8ZXGgsaIdp18hUrPFKJP5qxkICfnbxdyK858A5puUypj1OAqrOtAnwjk5lMPOYzBWjWV72RPnOY3-6KAHo8uFXK3EH8AN8ErHxhpo-soV0e7-Z7gEnmt0rliY3j_-2AHA0Q5G1k52cGQ-dARGzgAQacpdnQv_pT0k83DGZPrpR6PqBRkyiJBD_PTvySZohxFgjpJfJmkYec7Pg40xri_LN1ozkLRBdQwL2zaQFYtq_VZC20a8Y7NpqpoLcvFIB9W2NS03qTokvId7gdSgdcVmpOo4n7OZZCouD6cyWyJ6Nj9uaxz-mw4Mdzhpd8cclSV_gXeWMBBoW3dZ7zzkEFMWHBT2x9S8JAZor_aaGJ2MXOoNoHRg-q9shNhQ3h7U14MXfL7I9R4ixClZMOpxILa0VT0Vzm-h685xkXwa28WLSw21QU\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:45:46 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": "\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\"" + }, + { + "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": "1401" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 683, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T19:45:46.841Z", + "time": 115, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 115 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/am_1076162899/recording.har new file mode 100644 index 000000000..a3b1436f5 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/am_1076162899/recording.har @@ -0,0 +1,312 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/0_n_e_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-39" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + }, + { + "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": 398, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 614, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 614, + "text": "{\"_id\":\"*\",\"_rev\":\"959929574\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"311468432e97f1f\",\"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": "content-security-policy", + "value": "frame-ancestors 'self', default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-security-policy-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": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"959929574\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "614" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:47:11 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + }, + { + "name": "strict-transport-security", + "value": "max-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": 779, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T19:47:11.870Z", + "time": 172, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 172 + } + }, + { + "_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-39" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + }, + { + "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": 1926, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 273, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 273, + "text": "{\"_id\":\"version\",\"_rev\":\"1245987628\",\"version\":\"9.0.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 9.0.0-SNAPSHOT Build 96952edaffd9295f1b26b1145ff158e577b2ecb0 (2026-June-02 12:57)\",\"revision\":\"96952edaffd9295f1b26b1145ff158e577b2ecb0\",\"date\":\"2026-June-02 12:57\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-security-policy", + "value": "frame-ancestors 'self', default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-security-policy-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": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1245987628\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "273" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:47:12 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + }, + { + "name": "strict-transport-security", + "value": "max-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": 780, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T19:47:12.219Z", + "time": 114, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 114 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/environment_1072573434/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/environment_1072573434/recording.har new file mode 100644 index 000000000..01d114717 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/environment_1072573434/recording.har @@ -0,0 +1,237 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/0_n_e_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-39" + }, + { + "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": 1877, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/scopes/service-accounts" + }, + "response": { + "bodySize": 1910, + "content": { + "mimeType": "application/json; charset=utf-8", + "size": 1910, + "text": "[{\"scope\":\"fr:am:*\",\"description\":\"All Access Management 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:idm:*\",\"description\":\"All Identity Management APIs\"},{\"scope\":\"fr:iga:*\",\"description\":\"All Identity Governance APIs\"}]" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "1910" + }, + { + "name": "etag", + "value": "W/\"776-b2xCO2Gdrqb/5HdcH8WdC8M9zoM\"" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:47:12 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "cd24a64c-92d1-46a1-9f5a-1fef602d6dde" + }, + { + "name": "strict-transport-security", + "value": "max-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": 388, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T19:47:12.339Z", + "time": 107, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 107 + } + }, + { + "_id": "a92b17dd3b7e1b1815db35537391bba5", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 103, + "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-39" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "103" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1902, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"dGhpcyBpcyBhIHRlc3Q=\",\"description\":\"Welcome email template\",\"expressionType\":\"string\"}" + }, + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/variables/esv-email-welcome" + }, + "response": { + "bodySize": 236, + "content": { + "mimeType": "application/json", + "size": 236, + "text": "{\"_id\":\"esv-email-welcome\",\"description\":\"Welcome email template\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-06-10T19:47:13.968829286Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"valueBase64\":\"dGhpcyBpcyBhIHRlc3Q=\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:47:14 GMT" + }, + { + "name": "content-length", + "value": "236" + }, + { + "name": "x-forgerock-transactionid", + "value": "f9d2481e-6a8a-4bf4-be6a-09971fcf9c19" + }, + { + "name": "strict-transport-security", + "value": "max-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": 300, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T19:47:12.557Z", + "time": 1992, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 1992 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/oauth2_393036114/recording.har new file mode 100644 index 000000000..27865bf7b --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/oauth2_393036114/recording.har @@ -0,0 +1,146 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/0_n_e_D/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1328, + "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-39" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1328" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 453, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:idc:esv:* fr:idc:content-security-policy:* fr:iga:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1780, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1780, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:idc:esv:* fr:idc:content-security-policy:* fr:iga:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "content-security-policy", + "value": "frame-ancestors 'self'" + }, + { + "name": "content-security-policy-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": "1780" + }, + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:47:12 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + }, + { + "name": "strict-transport-security", + "value": "max-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": 556, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T19:47:12.056Z", + "time": 157, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 157 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/openidm_3290118515/recording.har new file mode 100644 index 000000000..2e8fcece9 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/0_n_e_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-39" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1938, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-trivir-fairfax.forgeblocks.com/openidm/managed/svcacct/10d76629-78da-4265-868b-9a0cb68ebdb4?_fields=%2A" + }, + "response": { + "bodySize": 1401, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1401, + "text": "{\"_id\":\"10d76629-78da-4265-868b-9a0cb68ebdb4\",\"_rev\":\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1777919406717\",\"description\":\"dsevy@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:iga:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"hshlr1hlp8bXdLNDrh3rESiHNsMS68c4XtbZX9i_Seg\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"owg6VJta_1o9VqyQk4Xs2kA_BDcyWEN1WMERqaJIFCbtecz_IMBp2G5m76dawbB9QvUsFvMqfJ2OGbaCcfC2o5lkxEu4nxdKLKYZ4-JTGsbPN6j-f9yr0LCjFMPd1BRxKQ98euSu5UZ0_gy9QN-eS4zB5zJsb8E7Y7FXsxG6vgd8dCqCSPjJeSmZhnQEeqJeysGlA5jMzQUP9Lvgm2aZp5wz7DXzF9lvsqRjm49H9wlERjy4KDmjlp5Rr3lz8ZXGgsaIdp18hUrPFKJP5qxkICfnbxdyK858A5puUypj1OAqrOtAnwjk5lMPOYzBWjWV72RPnOY3-6KAHo8uFXK3EH8AN8ErHxhpo-soV0e7-Z7gEnmt0rliY3j_-2AHA0Q5G1k52cGQ-dARGzgAQacpdnQv_pT0k83DGZPrpR6PqBRkyiJBD_PTvySZohxFgjpJfJmkYec7Pg40xri_LN1ozkLRBdQwL2zaQFYtq_VZC20a8Y7NpqpoLcvFIB9W2NS03qTokvId7gdSgdcVmpOo4n7OZZCouD6cyWyJ6Nj9uaxz-mw4Mdzhpd8cclSV_gXeWMBBoW3dZ7zzkEFMWHBT2x9S8JAZor_aaGJ2MXOoNoHRg-q9shNhQ3h7U14MXfL7I9R4ixClZMOpxILa0VT0Vzm-h685xkXwa28WLSw21QU\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:47:12 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": "\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\"" + }, + { + "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": "1401" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + }, + { + "name": "strict-transport-security", + "value": "max-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": 658, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T19:47:12.257Z", + "time": 191, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 191 + } + }, + { + "_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-39" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1938, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-trivir-fairfax.forgeblocks.com/openidm/managed/svcacct/10d76629-78da-4265-868b-9a0cb68ebdb4?_fields=%2A" + }, + "response": { + "bodySize": 1401, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1401, + "text": "{\"_id\":\"10d76629-78da-4265-868b-9a0cb68ebdb4\",\"_rev\":\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1777919406717\",\"description\":\"dsevy@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:iga:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"hshlr1hlp8bXdLNDrh3rESiHNsMS68c4XtbZX9i_Seg\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"owg6VJta_1o9VqyQk4Xs2kA_BDcyWEN1WMERqaJIFCbtecz_IMBp2G5m76dawbB9QvUsFvMqfJ2OGbaCcfC2o5lkxEu4nxdKLKYZ4-JTGsbPN6j-f9yr0LCjFMPd1BRxKQ98euSu5UZ0_gy9QN-eS4zB5zJsb8E7Y7FXsxG6vgd8dCqCSPjJeSmZhnQEeqJeysGlA5jMzQUP9Lvgm2aZp5wz7DXzF9lvsqRjm49H9wlERjy4KDmjlp5Rr3lz8ZXGgsaIdp18hUrPFKJP5qxkICfnbxdyK858A5puUypj1OAqrOtAnwjk5lMPOYzBWjWV72RPnOY3-6KAHo8uFXK3EH8AN8ErHxhpo-soV0e7-Z7gEnmt0rliY3j_-2AHA0Q5G1k52cGQ-dARGzgAQacpdnQv_pT0k83DGZPrpR6PqBRkyiJBD_PTvySZohxFgjpJfJmkYec7Pg40xri_LN1ozkLRBdQwL2zaQFYtq_VZC20a8Y7NpqpoLcvFIB9W2NS03qTokvId7gdSgdcVmpOo4n7OZZCouD6cyWyJ6Nj9uaxz-mw4Mdzhpd8cclSV_gXeWMBBoW3dZ7zzkEFMWHBT2x9S8JAZor_aaGJ2MXOoNoHRg-q9shNhQ3h7U14MXfL7I9R4ixClZMOpxILa0VT0Vzm-h685xkXwa28WLSw21QU\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Wed, 10 Jun 2026 19:47:12 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": "\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\"" + }, + { + "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": "1401" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + }, + { + "name": "strict-transport-security", + "value": "max-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": 658, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-10T19:47:12.454Z", + "time": 96, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 96 + } + } + ], + "pages": [], + "version": "1.2" + } +} From f838af7dc59047c2b86dd8d37a2bdc624c5200c3 Mon Sep 17 00:00:00 2001 From: Dallin Sevy Date: Thu, 18 Jun 2026 10:10:27 -0600 Subject: [PATCH 4/6] wip --- src/configManagerOps/FrConfigVariableOps.ts | 37 +++++++-------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/src/configManagerOps/FrConfigVariableOps.ts b/src/configManagerOps/FrConfigVariableOps.ts index 155151eb9..6a051c608 100644 --- a/src/configManagerOps/FrConfigVariableOps.ts +++ b/src/configManagerOps/FrConfigVariableOps.ts @@ -11,7 +11,7 @@ import { } from '../utils/Console'; import { escapePlaceholders, esvToEnv } from '../utils/FrConfig'; -const { getFilePath, saveJsonToFile } = frodo.utils; +const { getFilePath, saveJsonToFile, readToJson } = frodo.utils; const { readVariables, importVariable } = frodo.cloud.variable; /** @@ -160,15 +160,14 @@ export async function configManagerImportVariables( return true; } - const files = fs + const envFile = loadEnvFile(); + + const fileNames = fs .readdirSync(variablesDir) .filter((name) => name.toLowerCase().endsWith('.json')) - .map((name) => - JSON.parse(fs.readFileSync(`${variablesDir}/${name}`, 'utf8')) - ) - .filter((data) => !variableName || data._id === variableName); + .filter((name) => !variableName || name === `${variableName}.json`); - if (files.length === 0) { + if (fileNames.length === 0) { stopProgressIndicator( spinnerId, variableName @@ -181,33 +180,21 @@ export async function configManagerImportVariables( stopProgressIndicator( spinnerId, - `Successfully read ${files.length} variables.`, + `Successfully read ${fileNames.length} variables.`, 'success' ); - const envFile = loadEnvFile(); indicatorId = createProgressIndicator( 'determinate', - files.length, + fileNames.length, 'Importing variables' ); - for (const importData of files) { + for (const fileName of fileNames) { try { - if (value) { - importData.valueBase64 = Buffer.from(value).toString('base64'); - } else if (importData.valueBase64) { - importData.valueBase64 = resolvePlaceholder( - importData.valueBase64, - envFile - ); - } else { - throw new FrodoError( - `No value provided for variable ${importData._id}` - ); - } - + const importData = readToJson(`${variablesDir}/${fileName}`, {overrideValue: value, envFile, base64Encode: true}) + if (!importData.expressionType) { importData.expressionType = 'string'; } @@ -228,7 +215,7 @@ export async function configManagerImportVariables( if (errors.length > 0) { throw new FrodoError(`Error importing variables`, errors); } - stopProgressIndicator(indicatorId, `${files.length} variables imported.`); + stopProgressIndicator(indicatorId, `${fileNames.length} variables imported.`); return true; } catch (error) { stopProgressIndicator(indicatorId, `Error importing variables`, 'fail'); From d8e66aa1fb0d5bdb99d28b489458eeca135a47c3 Mon Sep 17 00:00:00 2001 From: Dallin Sevy Date: Thu, 18 Jun 2026 11:18:14 -0600 Subject: [PATCH 5/6] fix tests and re add -e flag in cli --- src/cli/FrodoCommand.ts | 9 - ...ig-manager-push-variables.e2e.test.js.snap | 8 +- .../config-manager-push-variables.e2e.test.js | 16 +- .../am_1076162899/recording.har | 36 +- .../environment_1072573434/recording.har | 68 ++-- .../oauth2_393036114/recording.har | 18 +- .../openidm_3290118515/recording.har | 32 +- .../am_1076162899/recording.har | 312 ++++++++++++++++++ .../environment_1072573434/recording.har | 237 +++++++++++++ .../oauth2_393036114/recording.har | 146 ++++++++ .../openidm_3290118515/recording.har | 310 +++++++++++++++++ .../am_1076162899/recording.har | 36 +- .../environment_1072573434/recording.har | 48 +-- .../oauth2_393036114/recording.har | 14 +- .../openidm_3290118515/recording.har | 32 +- 15 files changed, 1162 insertions(+), 160 deletions(-) create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/am_1076162899/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/environment_1072573434/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/oauth2_393036114/recording.har create mode 100644 test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/openidm_3290118515/recording.har diff --git a/src/cli/FrodoCommand.ts b/src/cli/FrodoCommand.ts index f2fefa715..5636393af 100644 --- a/src/cli/FrodoCommand.ts +++ b/src/cli/FrodoCommand.ts @@ -523,14 +523,6 @@ const directoryOption = withHelpGroup( RUNTIME_OPTIONS_HEADING ); -const environmentOption = withHelpGroup( - new Option( - '-V, --env ', - 'Value to use for the placeholder. Overrides .env files and environment variables' - ).default(undefined, 'undefined'), - RUNTIME_OPTIONS_HEADING -); - const insecureOption = withHelpGroup( new Option( '-k, --insecure', @@ -631,7 +623,6 @@ const defaultOpts = [ amsterPrivateKeyFileOption, deploymentOption, directoryOption, - environmentOption, insecureOption, verboseOption, debugOption, diff --git a/test/e2e/__snapshots__/config-manager-push-variables.e2e.test.js.snap b/test/e2e/__snapshots__/config-manager-push-variables.e2e.test.js.snap index 2b22eae83..4223f79b1 100644 --- a/test/e2e/__snapshots__/config-manager-push-variables.e2e.test.js.snap +++ b/test/e2e/__snapshots__/config-manager-push-variables.e2e.test.js.snap @@ -9,11 +9,11 @@ exports[`frodo config-manager push variables "frodo config-manager push variable " `; -exports[`frodo config-manager push variables "frodo config-manager push variables -n esv-email-welcome -e "this is a test" -D test/e2e/exports/fr-config-manager/cloud ": should import the specified variable into cloud" 1`] = `""`; +exports[`frodo config-manager push variables "frodo config-manager push variables -n esv-email-welcome -e "this is a third test" -D test/e2e/exports/fr-config-manager/cloud ": should import the specified variable into cloud" 1`] = `""`; -exports[`frodo config-manager push variables "frodo config-manager push variables -n esv-email-welcome -e "this is a test" -D test/e2e/exports/fr-config-manager/cloud ": should import the specified variable into cloud" 2`] = ` +exports[`frodo config-manager push variables "frodo config-manager push variables -n esv-email-welcome -e "this is a third test" -D test/e2e/exports/fr-config-manager/cloud ": should import the specified variable into cloud" 2`] = ` "Experimental feature in use: 'frodo config-manager push variables'. This feature may change without notice. -✔ Successfully read 2 variables. -• 2 variables imported. +✔ Successfully read 1 variables. +• 1 variables imported. " `; diff --git a/test/e2e/config-manager-push-variables.e2e.test.js b/test/e2e/config-manager-push-variables.e2e.test.js index cee5c6530..5ed210a5e 100644 --- a/test/e2e/config-manager-push-variables.e2e.test.js +++ b/test/e2e/config-manager-push-variables.e2e.test.js @@ -47,9 +47,9 @@ */ /* -// ForgeOps +// Cloud FRODO_MOCK=record FRODO_NO_CACHE=1 FRODO_HOST=https://nightly.gcp.forgeops.com/am frodo config-manager push variables -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 variables -n esv-email-welcome -e "this is a test" -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 variables -n esv-email-welcome -e "this is a third test" -D test/e2e/exports/fr-config-manager/cloud */ import cp from 'child_process'; @@ -67,12 +67,18 @@ const allDirectory = "test/e2e/exports/fr-config-manager/cloud"; describe('frodo config-manager push variables', () => { test(`"frodo config-manager push variables -D ${allDirectory} ": should import variables into cloud"`, async () => { const CMD = `frodo config-manager push variables -D ${allDirectory} `; - const { stdout, stderr } = await exec(CMD, cloudEnv); + const { stdout, stderr } = await exec(CMD, { + env: { + ...cloudEnv.env, + ESV_EMAIL_WELCOME: "value", + ESV_CONNECTOR_TIMEOUT_RESET_COUNTER: "15" + } + }); expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); expect(removeAnsiEscapeCodes(stderr)).toMatchSnapshot(); }); - test(`"frodo config-manager push variables -n esv-email-welcome -e "this is a test" -D ${allDirectory} ": should import the specified variable into cloud"`, async () => { - const CMD = `frodo config-manager push variables -D ${allDirectory} `; + test(`"frodo config-manager push variables -n esv-email-welcome -e "this is a third test" -D ${allDirectory} ": should import the specified variable into cloud"`, async () => { + const CMD = `frodo config-manager push variables -n esv-email-welcome -e "this is a third test" -D ${allDirectory} `; const { stdout, stderr } = await exec(CMD, cloudEnv); expect(removeAnsiEscapeCodes(stdout)).toMatchSnapshot(); expect(removeAnsiEscapeCodes(stderr)).toMatchSnapshot(); diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/am_1076162899/recording.har index 59a657dd3..083fd8878 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/am_1076162899/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/am_1076162899/recording.har @@ -25,11 +25,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "x-forgerock-transactionid", - "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + "value": "frodo-0c48ffed-ac20-499d-8770-d0d118bcade6" }, { "name": "accept-api-version", @@ -113,11 +113,11 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 19:45:46 GMT" + "value": "Thu, 18 Jun 2026 17:05:18 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + "value": "frodo-0c48ffed-ac20-499d-8770-d0d118bcade6" }, { "name": "strict-transport-security", @@ -133,17 +133,17 @@ }, { "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + "value": "h3=\":443\"; ma=2592000" } ], - "headersSize": 804, + "headersSize": 779, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:45:46.231Z", - "time": 171, + "startedDateTime": "2026-06-18T17:05:18.431Z", + "time": 271, "timings": { "blocked": -1, "connect": -1, @@ -151,7 +151,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 171 + "wait": 271 } }, { @@ -172,11 +172,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "x-forgerock-transactionid", - "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + "value": "frodo-0c48ffed-ac20-499d-8770-d0d118bcade6" }, { "name": "accept-api-version", @@ -264,11 +264,11 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 19:45:46 GMT" + "value": "Thu, 18 Jun 2026 17:05:19 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + "value": "frodo-0c48ffed-ac20-499d-8770-d0d118bcade6" }, { "name": "strict-transport-security", @@ -284,17 +284,17 @@ }, { "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + "value": "h3=\":443\"; ma=2592000" } ], - "headersSize": 805, + "headersSize": 780, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:45:46.594Z", - "time": 121, + "startedDateTime": "2026-06-18T17:05:18.925Z", + "time": 135, "timings": { "blocked": -1, "connect": -1, @@ -302,7 +302,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 121 + "wait": 135 } } ], diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/environment_1072573434/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/environment_1072573434/recording.har index ee82bb585..3c0647ee5 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/environment_1072573434/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/environment_1072573434/recording.har @@ -25,7 +25,7 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "accept-api-version", @@ -77,11 +77,11 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 19:45:46 GMT" + "value": "Thu, 18 Jun 2026 17:05:19 GMT" }, { "name": "x-forgerock-transactionid", - "value": "f02729bc-8a86-4ca9-85be-d3a7b22dfd68" + "value": "e64282ab-52d9-4b79-92c9-a820cb263ab0" }, { "name": "strict-transport-security", @@ -97,17 +97,17 @@ }, { "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + "value": "h3=\":443\"; ma=2592000" } ], - "headersSize": 413, + "headersSize": 388, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:45:46.721Z", - "time": 114, + "startedDateTime": "2026-06-18T17:05:19.065Z", + "time": 107, "timings": { "blocked": -1, "connect": -1, @@ -115,11 +115,11 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 114 + "wait": 107 } }, { - "_id": "b411d6d459c1ce2335ab7e6772ef2e04", + "_id": "27b5c63969385f91862abc8808d1c1f3", "_order": 0, "cache": {}, "request": { @@ -136,7 +136,7 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "accept-api-version", @@ -165,17 +165,17 @@ "postData": { "mimeType": "application/json", "params": [], - "text": "{\"valueBase64\":\"Y291bnQ9MTA=\",\"description\":\"\",\"expressionType\":\"string\"}" + "text": "{\"valueBase64\":\"Y291bnQ9MTU=\",\"description\":\"\",\"expressionType\":\"string\"}" }, "queryString": [], "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/variables/esv-connector-timeout-reset-counter" }, "response": { - "bodySize": 221, + "bodySize": 224, "content": { "mimeType": "application/json", - "size": 221, - "text": "{\"_id\":\"esv-connector-timeout-reset-counter\",\"description\":\"\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-06-10T19:31:09.095583Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"valueBase64\":\"Y291bnQ9MTA=\"}" + "size": 224, + "text": "{\"_id\":\"esv-connector-timeout-reset-counter\",\"description\":\"\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-06-18T17:05:20.597025208Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"valueBase64\":\"Y291bnQ9MTU=\"}" }, "cookies": [], "headers": [ @@ -185,15 +185,15 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 19:45:48 GMT" + "value": "Thu, 18 Jun 2026 17:05:21 GMT" }, { "name": "content-length", - "value": "221" + "value": "224" }, { "name": "x-forgerock-transactionid", - "value": "d8ff26c1-1562-400c-aa48-619b357183f7" + "value": "f590c0b0-a224-43bc-8dcb-eca052c8bbb7" }, { "name": "strict-transport-security", @@ -209,17 +209,17 @@ }, { "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + "value": "h3=\":443\"; ma=2592000" } ], - "headersSize": 325, + "headersSize": 300, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:45:46.964Z", - "time": 1421, + "startedDateTime": "2026-06-18T17:05:19.287Z", + "time": 1866, "timings": { "blocked": -1, "connect": -1, @@ -227,7 +227,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 1421 + "wait": 1866 } }, { @@ -248,7 +248,7 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "accept-api-version", @@ -283,11 +283,11 @@ "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/variables/esv-email-welcome" }, "response": { - "bodySize": 245, + "bodySize": 248, "content": { "mimeType": "application/json", - "size": 245, - "text": "{\"_id\":\"esv-email-welcome\",\"description\":\"Welcome email template\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-06-10T19:44:23.395398Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"valueBase64\":\"V2VsY29tZSB0byBvdXIgc2VydmljZQ==\"}" + "size": 248, + "text": "{\"_id\":\"esv-email-welcome\",\"description\":\"Welcome email template\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-06-18T17:05:22.608745863Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"valueBase64\":\"V2VsY29tZSB0byBvdXIgc2VydmljZQ==\"}" }, "cookies": [], "headers": [ @@ -297,15 +297,15 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 19:45:49 GMT" + "value": "Thu, 18 Jun 2026 17:05:23 GMT" }, { "name": "content-length", - "value": "245" + "value": "248" }, { "name": "x-forgerock-transactionid", - "value": "34e80493-e600-41ac-a40b-309e8d733404" + "value": "e1025179-d610-4daa-89d1-392317900a1a" }, { "name": "strict-transport-security", @@ -321,17 +321,17 @@ }, { "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + "value": "h3=\":443\"; ma=2592000" } ], - "headersSize": 325, + "headersSize": 300, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:45:48.391Z", - "time": 1601, + "startedDateTime": "2026-06-18T17:05:21.159Z", + "time": 2009, "timings": { "blocked": -1, "connect": -1, @@ -339,7 +339,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 1601 + "wait": 2009 } } ], diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/oauth2_393036114/recording.har index 26f51004b..6ebc32791 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/oauth2_393036114/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/oauth2_393036114/recording.har @@ -25,11 +25,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "x-forgerock-transactionid", - "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + "value": "frodo-0c48ffed-ac20-499d-8770-d0d118bcade6" }, { "name": "accept-api-version", @@ -98,11 +98,11 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 19:45:46 GMT" + "value": "Thu, 18 Jun 2026 17:05:18 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + "value": "frodo-0c48ffed-ac20-499d-8770-d0d118bcade6" }, { "name": "strict-transport-security", @@ -118,17 +118,17 @@ }, { "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + "value": "h3=\":443\"; ma=2592000" } ], - "headersSize": 581, + "headersSize": 556, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:45:46.416Z", - "time": 173, + "startedDateTime": "2026-06-18T17:05:18.714Z", + "time": 206, "timings": { "blocked": -1, "connect": -1, @@ -136,7 +136,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 173 + "wait": 206 } } ], diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/openidm_3290118515/recording.har index eb21a85c8..b403291e8 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/openidm_3290118515/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_D_2157136892/openidm_3290118515/recording.har @@ -25,11 +25,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "x-forgerock-transactionid", - "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + "value": "frodo-0c48ffed-ac20-499d-8770-d0d118bcade6" }, { "name": "authorization", @@ -66,7 +66,7 @@ "headers": [ { "name": "date", - "value": "Wed, 10 Jun 2026 19:45:46 GMT" + "value": "Thu, 18 Jun 2026 17:05:19 GMT" }, { "name": "vary", @@ -118,7 +118,7 @@ }, { "name": "x-forgerock-transactionid", - "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + "value": "frodo-0c48ffed-ac20-499d-8770-d0d118bcade6" }, { "name": "strict-transport-security", @@ -143,8 +143,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:45:46.634Z", - "time": 179, + "startedDateTime": "2026-06-18T17:05:18.967Z", + "time": 200, "timings": { "blocked": -1, "connect": -1, @@ -152,7 +152,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 179 + "wait": 200 } }, { @@ -173,11 +173,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "x-forgerock-transactionid", - "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + "value": "frodo-0c48ffed-ac20-499d-8770-d0d118bcade6" }, { "name": "authorization", @@ -214,7 +214,7 @@ "headers": [ { "name": "date", - "value": "Wed, 10 Jun 2026 19:45:46 GMT" + "value": "Thu, 18 Jun 2026 17:05:19 GMT" }, { "name": "vary", @@ -266,7 +266,7 @@ }, { "name": "x-forgerock-transactionid", - "value": "frodo-e5322104-6490-405a-a9a8-83d381bc31bc" + "value": "frodo-0c48ffed-ac20-499d-8770-d0d118bcade6" }, { "name": "strict-transport-security", @@ -282,17 +282,17 @@ }, { "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + "value": "h3=\":443\"; ma=2592000" } ], - "headersSize": 683, + "headersSize": 658, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:45:46.841Z", - "time": 115, + "startedDateTime": "2026-06-18T17:05:19.180Z", + "time": 101, "timings": { "blocked": -1, "connect": -1, @@ -300,7 +300,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 115 + "wait": 101 } } ], diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/am_1076162899/recording.har new file mode 100644 index 000000000..fb80a9d7c --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/am_1076162899/recording.har @@ -0,0 +1,312 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/0_n_V_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-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d151e304-7455-4fe7-a494-e1cc6730b2cb" + }, + { + "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": 398, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/json/serverinfo/*" + }, + "response": { + "bodySize": 614, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 614, + "text": "{\"_id\":\"*\",\"_rev\":\"959929574\",\"domains\":[],\"protectedUserAttributes\":[\"telephoneNumber\",\"mail\"],\"cookieName\":\"311468432e97f1f\",\"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": "content-security-policy", + "value": "frame-ancestors 'self', default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-security-policy-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": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"959929574\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "614" + }, + { + "name": "date", + "value": "Thu, 18 Jun 2026 16:51:02 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d151e304-7455-4fe7-a494-e1cc6730b2cb" + }, + { + "name": "strict-transport-security", + "value": "max-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": 779, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-18T16:51:02.464Z", + "time": 146, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 146 + } + }, + { + "_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-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d151e304-7455-4fe7-a494-e1cc6730b2cb" + }, + { + "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": 1926, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/json/serverinfo/version" + }, + "response": { + "bodySize": 273, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 273, + "text": "{\"_id\":\"version\",\"_rev\":\"1245987628\",\"version\":\"9.0.0-SNAPSHOT\",\"fullVersion\":\"ForgeRock Access Management 9.0.0-SNAPSHOT Build 96952edaffd9295f1b26b1145ff158e577b2ecb0 (2026-June-02 12:57)\",\"revision\":\"96952edaffd9295f1b26b1145ff158e577b2ecb0\",\"date\":\"2026-June-02 12:57\"}" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "DENY" + }, + { + "name": "content-security-policy", + "value": "frame-ancestors 'self', default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-security-policy-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": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"1245987628\"" + }, + { + "name": "expires", + "value": "0" + }, + { + "name": "pragma", + "value": "no-cache" + }, + { + "name": "content-type", + "value": "application/json;charset=UTF-8" + }, + { + "name": "content-length", + "value": "273" + }, + { + "name": "date", + "value": "Thu, 18 Jun 2026 16:51:02 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d151e304-7455-4fe7-a494-e1cc6730b2cb" + }, + { + "name": "strict-transport-security", + "value": "max-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": 780, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-18T16:51:02.801Z", + "time": 118, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 118 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/environment_1072573434/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/environment_1072573434/recording.har new file mode 100644 index 000000000..d5e337771 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/environment_1072573434/recording.har @@ -0,0 +1,237 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/0_n_V_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-43" + }, + { + "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": 1877, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/scopes/service-accounts" + }, + "response": { + "bodySize": 1910, + "content": { + "mimeType": "application/json; charset=utf-8", + "size": 1910, + "text": "[{\"scope\":\"fr:am:*\",\"description\":\"All Access Management 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:idm:*\",\"description\":\"All Identity Management APIs\"},{\"scope\":\"fr:iga:*\",\"description\":\"All Identity Governance APIs\"}]" + }, + "cookies": [], + "headers": [ + { + "name": "x-frame-options", + "value": "SAMEORIGIN" + }, + { + "name": "content-type", + "value": "application/json; charset=utf-8" + }, + { + "name": "content-length", + "value": "1910" + }, + { + "name": "etag", + "value": "W/\"776-b2xCO2Gdrqb/5HdcH8WdC8M9zoM\"" + }, + { + "name": "date", + "value": "Thu, 18 Jun 2026 16:51:03 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "fac6ad51-a273-454a-8f6e-e1df34a009bd" + }, + { + "name": "strict-transport-security", + "value": "max-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": 388, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-18T16:51:02.926Z", + "time": 102, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 102 + } + }, + { + "_id": "a92b17dd3b7e1b1815db35537391bba5", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 103, + "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-43" + }, + { + "name": "accept-api-version", + "value": "protocol=1.0,resource=1.0" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "content-length", + "value": "103" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1902, + "httpVersion": "HTTP/1.1", + "method": "PUT", + "postData": { + "mimeType": "application/json", + "params": [], + "text": "{\"valueBase64\":\"dGhpcyBpcyBhIHRlc3Q=\",\"description\":\"Welcome email template\",\"expressionType\":\"string\"}" + }, + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/variables/esv-email-welcome" + }, + "response": { + "bodySize": 236, + "content": { + "mimeType": "application/json", + "size": 236, + "text": "{\"_id\":\"esv-email-welcome\",\"description\":\"Welcome email template\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-06-18T16:51:04.596895479Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"valueBase64\":\"dGhpcyBpcyBhIHRlc3Q=\"}" + }, + "cookies": [], + "headers": [ + { + "name": "content-type", + "value": "application/json" + }, + { + "name": "date", + "value": "Thu, 18 Jun 2026 16:51:05 GMT" + }, + { + "name": "content-length", + "value": "236" + }, + { + "name": "x-forgerock-transactionid", + "value": "65b1e3cd-f0d7-4b8c-aaca-52bc475c9313" + }, + { + "name": "strict-transport-security", + "value": "max-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": 300, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-18T16:51:03.155Z", + "time": 1937, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 1937 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/oauth2_393036114/recording.har new file mode 100644 index 000000000..6174667b0 --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/oauth2_393036114/recording.har @@ -0,0 +1,146 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/0_n_V_D/oauth2", + "creator": { + "comment": "persister:fs", + "name": "Polly.JS", + "version": "6.0.6" + }, + "entries": [ + { + "_id": "ff75519a93ccab829f8ee8cf5e92b49f", + "_order": 0, + "cache": {}, + "request": { + "bodySize": 1328, + "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-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d151e304-7455-4fe7-a494-e1cc6730b2cb" + }, + { + "name": "accept-api-version", + "value": "protocol=2.1,resource=1.0" + }, + { + "name": "content-length", + "value": "1328" + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 453, + "httpVersion": "HTTP/1.1", + "method": "POST", + "postData": { + "mimeType": "application/x-www-form-urlencoded", + "params": [], + "text": "assertion=&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:idc:esv:* fr:idc:content-security-policy:* fr:iga:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*" + }, + "queryString": [], + "url": "https://openam-trivir-fairfax.forgeblocks.com/am/oauth2/access_token" + }, + "response": { + "bodySize": 1780, + "content": { + "mimeType": "application/json;charset=UTF-8", + "size": 1780, + "text": "{\"access_token\":\"\",\"scope\":\"fr:idc:custom-domain:* fr:idc:release:* fr:idc:sso-cookie:* fr:am:* fr:idc:esv:* fr:idc:content-security-policy:* fr:iga:* fr:idc:certificate:* fr:idm:* fr:idc:analytics:* fr:idc:cookie-domain:* fr:idc:promotion:*\",\"token_type\":\"Bearer\",\"expires_in\":899}" + }, + "cookies": [], + "headers": [ + { + "name": "content-security-policy", + "value": "frame-ancestors 'self'" + }, + { + "name": "content-security-policy-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": "1780" + }, + { + "name": "date", + "value": "Thu, 18 Jun 2026 16:51:02 GMT" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d151e304-7455-4fe7-a494-e1cc6730b2cb" + }, + { + "name": "strict-transport-security", + "value": "max-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": 556, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-18T16:51:02.624Z", + "time": 171, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 171 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/openidm_3290118515/recording.har new file mode 100644 index 000000000..0baff4ffe --- /dev/null +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_V_D_2331779144/openidm_3290118515/recording.har @@ -0,0 +1,310 @@ +{ + "log": { + "_recordingName": "config-manager/push/variables/0_n_V_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-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d151e304-7455-4fe7-a494-e1cc6730b2cb" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1938, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-trivir-fairfax.forgeblocks.com/openidm/managed/svcacct/10d76629-78da-4265-868b-9a0cb68ebdb4?_fields=%2A" + }, + "response": { + "bodySize": 1401, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1401, + "text": "{\"_id\":\"10d76629-78da-4265-868b-9a0cb68ebdb4\",\"_rev\":\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1777919406717\",\"description\":\"dsevy@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:iga:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"hshlr1hlp8bXdLNDrh3rESiHNsMS68c4XtbZX9i_Seg\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"owg6VJta_1o9VqyQk4Xs2kA_BDcyWEN1WMERqaJIFCbtecz_IMBp2G5m76dawbB9QvUsFvMqfJ2OGbaCcfC2o5lkxEu4nxdKLKYZ4-JTGsbPN6j-f9yr0LCjFMPd1BRxKQ98euSu5UZ0_gy9QN-eS4zB5zJsb8E7Y7FXsxG6vgd8dCqCSPjJeSmZhnQEeqJeysGlA5jMzQUP9Lvgm2aZp5wz7DXzF9lvsqRjm49H9wlERjy4KDmjlp5Rr3lz8ZXGgsaIdp18hUrPFKJP5qxkICfnbxdyK858A5puUypj1OAqrOtAnwjk5lMPOYzBWjWV72RPnOY3-6KAHo8uFXK3EH8AN8ErHxhpo-soV0e7-Z7gEnmt0rliY3j_-2AHA0Q5G1k52cGQ-dARGzgAQacpdnQv_pT0k83DGZPrpR6PqBRkyiJBD_PTvySZohxFgjpJfJmkYec7Pg40xri_LN1ozkLRBdQwL2zaQFYtq_VZC20a8Y7NpqpoLcvFIB9W2NS03qTokvId7gdSgdcVmpOo4n7OZZCouD6cyWyJ6Nj9uaxz-mw4Mdzhpd8cclSV_gXeWMBBoW3dZ7zzkEFMWHBT2x9S8JAZor_aaGJ2MXOoNoHRg-q9shNhQ3h7U14MXfL7I9R4ixClZMOpxILa0VT0Vzm-h685xkXwa28WLSw21QU\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Jun 2026 16:51:02 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": "\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\"" + }, + { + "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": "1401" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d151e304-7455-4fe7-a494-e1cc6730b2cb" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 683, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-18T16:51:02.836Z", + "time": 196, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 196 + } + }, + { + "_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-43" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d151e304-7455-4fe7-a494-e1cc6730b2cb" + }, + { + "name": "authorization", + "value": "Bearer " + }, + { + "name": "accept-encoding", + "value": "gzip, compress, deflate, br" + }, + { + "name": "host", + "value": "openam-frodo-dev.forgeblocks.com" + } + ], + "headersSize": 1938, + "httpVersion": "HTTP/1.1", + "method": "GET", + "queryString": [ + { + "name": "_fields", + "value": "*" + } + ], + "url": "https://openam-trivir-fairfax.forgeblocks.com/openidm/managed/svcacct/10d76629-78da-4265-868b-9a0cb68ebdb4?_fields=%2A" + }, + "response": { + "bodySize": 1401, + "content": { + "mimeType": "application/json;charset=utf-8", + "size": 1401, + "text": "{\"_id\":\"10d76629-78da-4265-868b-9a0cb68ebdb4\",\"_rev\":\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\",\"accountStatus\":\"active\",\"name\":\"Frodo-SA-1777919406717\",\"description\":\"dsevy@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:iga:*\",\"fr:idc:promotion:*\",\"fr:idc:release:*\",\"fr:idc:sso-cookie:*\"],\"jwks\":\"{\\\"keys\\\":[{\\\"kty\\\":\\\"RSA\\\",\\\"kid\\\":\\\"hshlr1hlp8bXdLNDrh3rESiHNsMS68c4XtbZX9i_Seg\\\",\\\"alg\\\":\\\"RS256\\\",\\\"e\\\":\\\"AQAB\\\",\\\"n\\\":\\\"owg6VJta_1o9VqyQk4Xs2kA_BDcyWEN1WMERqaJIFCbtecz_IMBp2G5m76dawbB9QvUsFvMqfJ2OGbaCcfC2o5lkxEu4nxdKLKYZ4-JTGsbPN6j-f9yr0LCjFMPd1BRxKQ98euSu5UZ0_gy9QN-eS4zB5zJsb8E7Y7FXsxG6vgd8dCqCSPjJeSmZhnQEeqJeysGlA5jMzQUP9Lvgm2aZp5wz7DXzF9lvsqRjm49H9wlERjy4KDmjlp5Rr3lz8ZXGgsaIdp18hUrPFKJP5qxkICfnbxdyK858A5puUypj1OAqrOtAnwjk5lMPOYzBWjWV72RPnOY3-6KAHo8uFXK3EH8AN8ErHxhpo-soV0e7-Z7gEnmt0rliY3j_-2AHA0Q5G1k52cGQ-dARGzgAQacpdnQv_pT0k83DGZPrpR6PqBRkyiJBD_PTvySZohxFgjpJfJmkYec7Pg40xri_LN1ozkLRBdQwL2zaQFYtq_VZC20a8Y7NpqpoLcvFIB9W2NS03qTokvId7gdSgdcVmpOo4n7OZZCouD6cyWyJ6Nj9uaxz-mw4Mdzhpd8cclSV_gXeWMBBoW3dZ7zzkEFMWHBT2x9S8JAZor_aaGJ2MXOoNoHRg-q9shNhQ3h7U14MXfL7I9R4ixClZMOpxILa0VT0Vzm-h685xkXwa28WLSw21QU\\\"}]}\",\"maxCachingTime\":\"15\",\"maxIdleTime\":\"15\",\"maxSessionTime\":\"15\",\"quotaLimit\":\"5\"}" + }, + "cookies": [], + "headers": [ + { + "name": "date", + "value": "Thu, 18 Jun 2026 16:51:03 GMT" + }, + { + "name": "vary", + "value": "Origin" + }, + { + "name": "cache-control", + "value": "no-store" + }, + { + "name": "content-security-policy", + "value": "default-src 'none';frame-ancestors 'none';sandbox" + }, + { + "name": "content-type", + "value": "application/json;charset=utf-8" + }, + { + "name": "cross-origin-opener-policy", + "value": "same-origin" + }, + { + "name": "cross-origin-resource-policy", + "value": "same-origin" + }, + { + "name": "etag", + "value": "\"4b025e5d-c082-45f8-a3e9-0ac1db308dff-21339\"" + }, + { + "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": "1401" + }, + { + "name": "x-forgerock-transactionid", + "value": "frodo-d151e304-7455-4fe7-a494-e1cc6730b2cb" + }, + { + "name": "strict-transport-security", + "value": "max-age=31536000; includeSubDomains; preload;" + }, + { + "name": "x-robots-tag", + "value": "none" + }, + { + "name": "via", + "value": "1.1 google" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" + } + ], + "headersSize": 683, + "httpVersion": "HTTP/1.1", + "redirectURL": "", + "status": 200, + "statusText": "OK" + }, + "startedDateTime": "2026-06-18T16:51:03.035Z", + "time": 113, + "timings": { + "blocked": -1, + "connect": -1, + "dns": -1, + "receive": 0, + "send": 0, + "ssl": -1, + "wait": 113 + } + } + ], + "pages": [], + "version": "1.2" + } +} diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/am_1076162899/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/am_1076162899/recording.har index a3b1436f5..9c79147c8 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/am_1076162899/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/am_1076162899/recording.har @@ -25,11 +25,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "x-forgerock-transactionid", - "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + "value": "frodo-bb07415a-a7e2-487d-b13c-a9c2ef1cd876" }, { "name": "accept-api-version", @@ -113,11 +113,11 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 19:47:11 GMT" + "value": "Thu, 18 Jun 2026 17:11:39 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + "value": "frodo-bb07415a-a7e2-487d-b13c-a9c2ef1cd876" }, { "name": "strict-transport-security", @@ -133,17 +133,17 @@ }, { "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000" + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 779, + "headersSize": 804, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:47:11.870Z", - "time": 172, + "startedDateTime": "2026-06-18T17:11:39.462Z", + "time": 150, "timings": { "blocked": -1, "connect": -1, @@ -151,7 +151,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 172 + "wait": 150 } }, { @@ -172,11 +172,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "x-forgerock-transactionid", - "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + "value": "frodo-bb07415a-a7e2-487d-b13c-a9c2ef1cd876" }, { "name": "accept-api-version", @@ -264,11 +264,11 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 19:47:12 GMT" + "value": "Thu, 18 Jun 2026 17:11:39 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + "value": "frodo-bb07415a-a7e2-487d-b13c-a9c2ef1cd876" }, { "name": "strict-transport-security", @@ -284,17 +284,17 @@ }, { "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000" + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 780, + "headersSize": 805, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:47:12.219Z", - "time": 114, + "startedDateTime": "2026-06-18T17:11:39.854Z", + "time": 133, "timings": { "blocked": -1, "connect": -1, @@ -302,7 +302,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 114 + "wait": 133 } } ], diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/environment_1072573434/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/environment_1072573434/recording.har index 01d114717..c2a96a92c 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/environment_1072573434/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/environment_1072573434/recording.har @@ -25,7 +25,7 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "accept-api-version", @@ -77,11 +77,11 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 19:47:12 GMT" + "value": "Thu, 18 Jun 2026 17:11:40 GMT" }, { "name": "x-forgerock-transactionid", - "value": "cd24a64c-92d1-46a1-9f5a-1fef602d6dde" + "value": "1576f078-2d1f-4092-8ccc-518df34b7619" }, { "name": "strict-transport-security", @@ -97,17 +97,17 @@ }, { "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000" + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 388, + "headersSize": 413, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:47:12.339Z", - "time": 107, + "startedDateTime": "2026-06-18T17:11:39.994Z", + "time": 106, "timings": { "blocked": -1, "connect": -1, @@ -115,15 +115,15 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 107 + "wait": 106 } }, { - "_id": "a92b17dd3b7e1b1815db35537391bba5", + "_id": "ceed7bff7aafbdbca76b7027b08d5772", "_order": 0, "cache": {}, "request": { - "bodySize": 103, + "bodySize": 111, "cookies": [], "headers": [ { @@ -136,7 +136,7 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "accept-api-version", @@ -148,7 +148,7 @@ }, { "name": "content-length", - "value": "103" + "value": "111" }, { "name": "accept-encoding", @@ -165,17 +165,17 @@ "postData": { "mimeType": "application/json", "params": [], - "text": "{\"valueBase64\":\"dGhpcyBpcyBhIHRlc3Q=\",\"description\":\"Welcome email template\",\"expressionType\":\"string\"}" + "text": "{\"valueBase64\":\"dGhpcyBpcyBhIHRoaXJkIHRlc3Q=\",\"description\":\"Welcome email template\",\"expressionType\":\"string\"}" }, "queryString": [], "url": "https://openam-trivir-fairfax.forgeblocks.com/environment/variables/esv-email-welcome" }, "response": { - "bodySize": 236, + "bodySize": 241, "content": { "mimeType": "application/json", - "size": 236, - "text": "{\"_id\":\"esv-email-welcome\",\"description\":\"Welcome email template\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-06-10T19:47:13.968829286Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"valueBase64\":\"dGhpcyBpcyBhIHRlc3Q=\"}" + "size": 241, + "text": "{\"_id\":\"esv-email-welcome\",\"description\":\"Welcome email template\",\"expressionType\":\"string\",\"lastChangeDate\":\"2026-06-18T17:05:55.290504Z\",\"lastChangedBy\":\"Frodo-SA-1777919406717\",\"loaded\":false,\"valueBase64\":\"dGhpcyBpcyBhIHRoaXJkIHRlc3Q=\"}" }, "cookies": [], "headers": [ @@ -185,15 +185,15 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 19:47:14 GMT" + "value": "Thu, 18 Jun 2026 17:11:41 GMT" }, { "name": "content-length", - "value": "236" + "value": "241" }, { "name": "x-forgerock-transactionid", - "value": "f9d2481e-6a8a-4bf4-be6a-09971fcf9c19" + "value": "a3c10027-f9b0-47de-a1eb-84c5b9bdc25d" }, { "name": "strict-transport-security", @@ -209,17 +209,17 @@ }, { "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000" + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 300, + "headersSize": 325, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:47:12.557Z", - "time": 1992, + "startedDateTime": "2026-06-18T17:11:40.224Z", + "time": 1274, "timings": { "blocked": -1, "connect": -1, @@ -227,7 +227,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 1992 + "wait": 1274 } } ], diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/oauth2_393036114/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/oauth2_393036114/recording.har index 27865bf7b..9fd99a4ae 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/oauth2_393036114/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/oauth2_393036114/recording.har @@ -25,11 +25,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "x-forgerock-transactionid", - "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + "value": "frodo-bb07415a-a7e2-487d-b13c-a9c2ef1cd876" }, { "name": "accept-api-version", @@ -98,11 +98,11 @@ }, { "name": "date", - "value": "Wed, 10 Jun 2026 19:47:12 GMT" + "value": "Thu, 18 Jun 2026 17:11:39 GMT" }, { "name": "x-forgerock-transactionid", - "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + "value": "frodo-bb07415a-a7e2-487d-b13c-a9c2ef1cd876" }, { "name": "strict-transport-security", @@ -127,8 +127,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:47:12.056Z", - "time": 157, + "startedDateTime": "2026-06-18T17:11:39.625Z", + "time": 223, "timings": { "blocked": -1, "connect": -1, @@ -136,7 +136,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 157 + "wait": 223 } } ], diff --git a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/openidm_3290118515/recording.har b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/openidm_3290118515/recording.har index 2e8fcece9..346feee91 100644 --- a/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/openidm_3290118515/recording.har +++ b/test/e2e/mocks/config-manager_4167095917/push_2272264157/variables_699097794/0_n_e_D_978558405/openidm_3290118515/recording.har @@ -25,11 +25,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "x-forgerock-transactionid", - "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + "value": "frodo-bb07415a-a7e2-487d-b13c-a9c2ef1cd876" }, { "name": "authorization", @@ -66,7 +66,7 @@ "headers": [ { "name": "date", - "value": "Wed, 10 Jun 2026 19:47:12 GMT" + "value": "Thu, 18 Jun 2026 17:11:40 GMT" }, { "name": "vary", @@ -118,7 +118,7 @@ }, { "name": "x-forgerock-transactionid", - "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + "value": "frodo-bb07415a-a7e2-487d-b13c-a9c2ef1cd876" }, { "name": "strict-transport-security", @@ -143,8 +143,8 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:47:12.257Z", - "time": 191, + "startedDateTime": "2026-06-18T17:11:39.900Z", + "time": 187, "timings": { "blocked": -1, "connect": -1, @@ -152,7 +152,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 191 + "wait": 187 } }, { @@ -173,11 +173,11 @@ }, { "name": "user-agent", - "value": "@rockcarver/frodo-lib/4.0.0-39" + "value": "@rockcarver/frodo-lib/4.0.0-43" }, { "name": "x-forgerock-transactionid", - "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + "value": "frodo-bb07415a-a7e2-487d-b13c-a9c2ef1cd876" }, { "name": "authorization", @@ -214,7 +214,7 @@ "headers": [ { "name": "date", - "value": "Wed, 10 Jun 2026 19:47:12 GMT" + "value": "Thu, 18 Jun 2026 17:11:40 GMT" }, { "name": "vary", @@ -266,7 +266,7 @@ }, { "name": "x-forgerock-transactionid", - "value": "frodo-adfe518f-1c53-4af8-9a30-d36c4305d208" + "value": "frodo-bb07415a-a7e2-487d-b13c-a9c2ef1cd876" }, { "name": "strict-transport-security", @@ -282,17 +282,17 @@ }, { "name": "alt-svc", - "value": "h3=\":443\"; ma=2592000" + "value": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" } ], - "headersSize": 658, + "headersSize": 683, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2026-06-10T19:47:12.454Z", - "time": 96, + "startedDateTime": "2026-06-18T17:11:40.106Z", + "time": 111, "timings": { "blocked": -1, "connect": -1, @@ -300,7 +300,7 @@ "receive": 0, "send": 0, "ssl": -1, - "wait": 96 + "wait": 111 } } ], From c72fe6bae51d7fbcd5821f20696ad15331d78b31 Mon Sep 17 00:00:00 2001 From: Dallin Sevy Date: Thu, 18 Jun 2026 14:32:26 -0600 Subject: [PATCH 6/6] update FrConfigVariableOps to use loadEnvFile from frodo lib --- src/configManagerOps/FrConfigVariableOps.ts | 40 +-------------------- 1 file changed, 1 insertion(+), 39 deletions(-) diff --git a/src/configManagerOps/FrConfigVariableOps.ts b/src/configManagerOps/FrConfigVariableOps.ts index 6a051c608..41d5873c7 100644 --- a/src/configManagerOps/FrConfigVariableOps.ts +++ b/src/configManagerOps/FrConfigVariableOps.ts @@ -11,7 +11,7 @@ import { } from '../utils/Console'; import { escapePlaceholders, esvToEnv } from '../utils/FrConfig'; -const { getFilePath, saveJsonToFile, readToJson } = frodo.utils; +const { getFilePath, saveJsonToFile, readToJson, loadEnvFile } = frodo.utils; const { readVariables, importVariable } = frodo.cloud.variable; /** @@ -74,44 +74,6 @@ export async function configManagerExportVariables(): Promise { return false; } -export function loadEnvFile(): Record { - const envPath = getFilePath('.env'); - - if (!fs.existsSync(envPath)) { - return {}; - } - - const out: Record = {}; - const contents = fs.readFileSync(envPath, 'utf8'); - - for (const rawLine of contents.split('\n')) { - const line = rawLine.trim(); - - if (!line || line.startsWith('#')) { - continue; - } - - const eq = line.indexOf('='); - - if (eq === -1) { - continue; - } - - const key = line.slice(0, eq).trim(); - let value = line.slice(eq + 1).trim(); - - if ( - (value.startsWith('"') && value.endsWith('"')) || - (value.startsWith("'") && value.endsWith("'")) - ) { - value = value.slice(1, -1); - } - if (key) { - out[key] = value; - } - } - return out; -} export function resolvePlaceholder( placeholder: string,