diff --git a/package-lock.json b/package-lock.json index 7f4b92260..bc85c5b92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,6 @@ "axios": "^1.13.4", "axios-mock-adapter": "^2.1.0", "axios-retry": "^4.4.0", - "colors": "^1.4.0", "copyfiles": "^2.4.1", "del": "^8.0.0", "eslint": "^9.39.2", @@ -57,6 +56,7 @@ "setup-polly-jest": "^0.11.0", "slugify": "^1.6.5", "sshpk": "^1.18.0", + "tinyrainbow": "^3.0.3", "ts-jest": "^29.1.2", "tsup": "^8.0.2", "typedoc": "^0.28.16", @@ -4157,6 +4157,27 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -4564,62 +4585,6 @@ "dev": true, "license": "MIT" }, - "node_modules/color-string": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", - "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/color-string/node_modules/color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", - "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=14.6" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -10106,6 +10071,37 @@ "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -11399,6 +11395,16 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/tinyrainbow": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", + "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", diff --git a/package.json b/package.json index a9b132183..3abe4033c 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,6 @@ "axios": "^1.13.4", "axios-mock-adapter": "^2.1.0", "axios-retry": "^4.4.0", - "colors": "^1.4.0", "copyfiles": "^2.4.1", "del": "^8.0.0", "eslint": "^9.39.2", @@ -131,6 +130,7 @@ "setup-polly-jest": "^0.11.0", "slugify": "^1.6.5", "sshpk": "^1.18.0", + "tinyrainbow": "^3.0.3", "ts-jest": "^29.1.2", "tsup": "^8.0.2", "typedoc": "^0.28.16", diff --git a/src/ops/AuthenticateOps.ts b/src/ops/AuthenticateOps.ts index 2a3565c30..3a69faecf 100644 --- a/src/ops/AuthenticateOps.ts +++ b/src/ops/AuthenticateOps.ts @@ -4,6 +4,7 @@ import { URL } from 'url'; import { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'; import jose from 'node-jose'; import sshpk from 'sshpk'; +import c from 'tinyrainbow'; import { v4 } from 'uuid'; import { @@ -383,7 +384,7 @@ async function determineDeploymentType(state: State): Promise { e.response.headers?.location?.indexOf('code=') > -1 ) { verboseMessage({ - message: `ForgeRock Identity Cloud`['brightCyan'] + ` detected.`, + message: c.cyan(`ForgeRock Identity Cloud`) + ` detected.`, state, }); deploymentType = Constants.CLOUD_DEPLOYMENT_TYPE_KEY; @@ -404,13 +405,13 @@ async function determineDeploymentType(state: State): Promise { // maybe we don't want to run through the auto-detect code if we get a custom admin client id? adminClientId = state.getAdminClientId() || forgeopsClientId; verboseMessage({ - message: `ForgeOps deployment`['brightCyan'] + ` detected.`, + message: c.cyan(`ForgeOps deployment`) + ` detected.`, state, }); deploymentType = Constants.FORGEOPS_DEPLOYMENT_TYPE_KEY; } else { verboseMessage({ - message: `Classic deployment`['brightCyan'] + ` detected.`, + message: c.cyan(`Classic deployment`) + ` detected.`, state, }); } diff --git a/src/shared/State.ts b/src/shared/State.ts index 9287e3d3c..59db0559f 100644 --- a/src/shared/State.ts +++ b/src/shared/State.ts @@ -4,6 +4,7 @@ import { IAxiosRetryConfig, isNetworkOrIdempotentRequestError, } from 'axios-retry'; +import c from 'tinyrainbow'; import winston from 'winston'; import { RetryStrategy } from '../api/BaseApi'; @@ -686,11 +687,11 @@ const globalState: StateInterface = { } }, errorHandler: (error: Error, message?: string) => { - if (message) process.stderr.write('' + message['brightRed']); + if (message) process.stderr.write('' + c.red(message)); switch (error.name) { case 'FrodoError': process.stderr.write( - '' + (error as FrodoError).getCombinedMessage()['brightRed'] + '' + c.red((error as FrodoError).getCombinedMessage()) ); break; @@ -712,12 +713,12 @@ const globalState: StateInterface = { errorMessage += status ? `\n Status: ${status}` : ''; errorMessage += message ? `\n Message: ${message}` : ''; errorMessage += detail ? `\n Detail: ${detail}` : ''; - process.stderr.write(errorMessage['brightRed']); + process.stderr.write(c.red(errorMessage)); break; } default: - process.stderr.write(error.message['brightRed']); + process.stderr.write(c.red(error.message)); break; } },