From afb898e00af21e4022bd3a8ab57a2c8ed5e61a5d Mon Sep 17 00:00:00 2001 From: modesty Date: Fri, 29 Aug 2025 12:17:06 -0700 Subject: [PATCH 1/3] fix: align auth cmd with latest fluent --- package.json | 2 +- src/tools/commands/authCommand.ts | 67 +++++++++++++++++++------ src/utils/logger.ts | 6 ++- test/tools/authCommand.test.ts | 82 ++++++++++++++++--------------- 4 files changed, 101 insertions(+), 56 deletions(-) diff --git a/package.json b/package.json index 8c9d685..2bf2abd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@modesty/fluent-mcp", - "version": "0.0.13", + "version": "0.0.14", "description": "MCP server for Fluent (ServiceNow SDK)", "keywords": [ "Servicenow SDK", diff --git a/src/tools/commands/authCommand.ts b/src/tools/commands/authCommand.ts index ab6ce6d..75936dc 100644 --- a/src/tools/commands/authCommand.ts +++ b/src/tools/commands/authCommand.ts @@ -13,22 +13,16 @@ export class AuthCommand extends SessionFallbackCommand { arguments: CommandArgument[] = [ { name: 'add', - type: 'boolean', - required: false, - description: 'Add / Create a new authentication profile', - }, - { - name: 'instanceUrl', type: 'string', required: false, - description: 'URL of the ServiceNow instance (required when using --add). Required for new auth alias.', + description: 'Instance name or URL to store authentication credentials for (now-sdk auth --add )', }, { name: 'type', type: 'string', required: false, description: - 'Authentication type (e.g., "oauth", "basic"). Default for localhost is "basic", for other hosts is "oauth"', + 'Type of authentication to use for new authentication credential. Choices: "basic", "oauth"', }, { name: 'alias', @@ -60,6 +54,18 @@ export class AuthCommand extends SessionFallbackCommand { required: false, description: 'Print debug output', }, + { + name: 'help', + type: 'boolean', + required: false, + description: 'Show help', + }, + { + name: 'version', + type: 'boolean', + required: false, + description: 'Show version number', + }, ]; constructor(commandProcessor: CommandProcessor) { @@ -69,24 +75,49 @@ export class AuthCommand extends SessionFallbackCommand { async execute(args: Record): Promise { this.validateArgs(args); - // Custom validation for add command - requires instanceUrl - if (args.add && !args.instanceUrl) { + // Validate mutually exclusive primary actions: add | list | delete | use + const primaryFlags = [ + typeof args.add !== 'undefined', + Boolean(args.list), + typeof args.delete !== 'undefined', + typeof args.use !== 'undefined', + ].filter(Boolean).length; + if (primaryFlags > 1) { return { exitCode: 1, success: false, output: '', - error: new Error('When using --add, you must provide --instanceUrl'), + error: new Error('Provide only one of --add, --list, --delete, or --use'), }; } const sdkArgs = ['now-sdk', 'auth']; // Handle different auth operations - if (args.add) { - sdkArgs.push('--add', args.instanceUrl as string); + if (typeof args.add === 'string') { + const addValue = args.add as string; + if (!addValue.trim()) { + return { + exitCode: 1, + success: false, + output: '', + error: new Error('When using --add, you must provide a non-empty instance name or URL'), + }; + } + sdkArgs.push('--add', addValue); if (args.type) { - sdkArgs.push('--type', args.type as string); + const typeValue = String(args.type); + const allowed = ['basic', 'oauth']; + if (!allowed.includes(typeValue)) { + return { + exitCode: 1, + success: false, + output: '', + error: new Error(`Invalid --type '${typeValue}'. Allowed values: basic, oauth`), + }; + } + sdkArgs.push('--type', typeValue); } if (args.alias) { @@ -105,6 +136,14 @@ export class AuthCommand extends SessionFallbackCommand { sdkArgs.push('--debug'); } + // Pass-through help/version if requested + if (args.help) { + sdkArgs.push('--help'); + } + if (args.version) { + sdkArgs.push('--version'); + } + return await this.executeWithFallback('npx', sdkArgs); } } diff --git a/src/utils/logger.ts b/src/utils/logger.ts index 762f651..3ef0a7a 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -268,9 +268,11 @@ export class Logger { }; } - const entry = this.formatLogEntry(LogLevel.ERROR, message, errorContext); + // In test environment, downgrade error logs to WARN to keep test output clean + const level = process.env.NODE_ENV === 'test' ? LogLevel.WARN : LogLevel.ERROR; + const entry = this.formatLogEntry(level, message, errorContext); // Only write to stderr, not stdout - this.writeLogEntry(LogLevel.ERROR, entry); + this.writeLogEntry(level, entry); } public critical(message: string, context?: Record): void { if (!this.shouldLog(LogLevel.CRITICAL)) return; diff --git a/test/tools/authCommand.test.ts b/test/tools/authCommand.test.ts index 39e94b1..55cf4e0 100644 --- a/test/tools/authCommand.test.ts +++ b/test/tools/authCommand.test.ts @@ -42,37 +42,45 @@ describe("AuthCommand", () => { expect(authCommand.description).toContain( "Manage Fluent (ServiceNow SDK) authentication" ); - // Check for expected arguments - expect(authCommand.arguments).toEqual( + const argNames = authCommand.arguments.map(a => a.name); + expect(argNames).toEqual( expect.arrayContaining([ - expect.objectContaining({ name: "add" }), - expect.objectContaining({ name: "instanceUrl" }), - expect.objectContaining({ name: "list" }) + "add", + "type", + "alias", + "list", + "delete", + "use", + "debug" ]) ); + expect(argNames).not.toContain("instanceUrl"); }); - test("should execute auth command with add action", async () => { - // Test args for add action + test("should execute auth command with --add value and optional flags", async () => { const args = { - action: "add", - id: "test-instance", - username: "test-user", - password: "test-pass", - url: "https://test-instance.service-now.com" + add: "foo", // instance name or URL + type: "basic", + alias: "bar" }; - - // Continue to call execute, which internally calls commandProcessor.process + const result = await authCommand.execute(args); - - // Verify CLICmdWriter's process method was called with correct arguments + expect(mockCmdWriter.process).toHaveBeenCalledWith( "npx", - expect.arrayContaining(["now-sdk", "auth"]), + expect.arrayContaining([ + "now-sdk", + "auth", + "--add", + "foo", + "--type", + "basic", + "--alias", + "bar" + ]), false, "/test-working-dir" ); - expect(result.success).toBe(true); }); @@ -89,31 +97,27 @@ describe("AuthCommand", () => { expect(mockCmdWriter.process).toHaveBeenCalled(); }); - test("should pass proper auth parameters to the processor", async () => { - const args = { - add: true, - instanceUrl: "https://dev123.service-now.com", - type: "basic", - alias: "dev-instance" - }; - + test("should pass through --list, --help and --version", async () => { + const args = { list: true, help: true, version: true }; await authCommand.execute(args); - - // Verify the processor received all the necessary auth parameters expect(mockCmdWriter.process).toHaveBeenCalledWith( - "npx", - expect.arrayContaining([ - "now-sdk", - "auth", - "--add", - "https://dev123.service-now.com", - "--type", - "basic", - "--alias", - "dev-instance" - ]), + "npx", + expect.arrayContaining(["now-sdk", "auth", "--list", "--help", "--version"]), false, "/test-working-dir" ); }); + + test("should error when multiple primary flags provided", async () => { + const result = await authCommand.execute({ list: true, use: "bar" }); + expect(result.success).toBe(false); + expect(result.error).toBeInstanceOf(Error); + expect((result.error as Error).message).toContain("Provide only one of"); + }); + + test("should validate --type choices", async () => { + const result = await authCommand.execute({ add: "foo", type: "invalid" }); + expect(result.success).toBe(false); + expect((result.error as Error).message).toContain("Invalid --type"); + }); }); From 86184334f1648e1c6183adce967185d8288e6014 Mon Sep 17 00:00:00 2001 From: modesty Date: Fri, 29 Aug 2025 12:23:28 -0700 Subject: [PATCH 2/3] maint: bump dep versions --- package-lock.json | 788 +++++++++++++++++++++++----------------------- package.json | 14 +- 2 files changed, 401 insertions(+), 401 deletions(-) diff --git a/package-lock.json b/package-lock.json index 035a865..9ad2d23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "@modesty/fluent-mcp", - "version": "0.0.13", + "version": "0.0.14", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@modesty/fluent-mcp", - "version": "0.0.13", + "version": "0.0.14", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "1.17.3", + "@modelcontextprotocol/sdk": "1.17.4", "@servicenow/sdk": "3.0.3", "zod": "^3.25.74" }, @@ -17,7 +17,7 @@ "fluent-mcp": "dist/index.js" }, "devDependencies": { - "@eslint/js": "^9.33.0", + "@eslint/js": "^9.34.0", "@rollup/plugin-commonjs": "^28.0.6", "@rollup/plugin-eslint": "^9.0.5", "@rollup/plugin-json": "^6.0.1", @@ -26,11 +26,11 @@ "@rollup/plugin-typescript": "^12.1.4", "@types/jest": "^30.0.0", "@types/node": "^24.3.0", - "@typescript-eslint/eslint-plugin": "^8.40.0", - "@typescript-eslint/parser": "^8.40.0", - "eslint": "^9.33.0", - "jest": "^30.0.5", - "rollup": "^4.46.3", + "@typescript-eslint/eslint-plugin": "^8.41.0", + "@typescript-eslint/parser": "^8.41.0", + "eslint": "^9.34.0", + "jest": "^30.1.1", + "rollup": "^4.49.0", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-sourcemaps": "^0.6.3", "ts-jest": "^29.4.1", @@ -669,21 +669,21 @@ } }, "node_modules/@emnapi/core": { - "version": "1.4.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@emnapi/core/-/core-1.4.5.tgz", - "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==", + "version": "1.5.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@emnapi/core/-/core-1.5.0.tgz", + "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.0.4", + "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.4.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@emnapi/runtime/-/runtime-1.4.5.tgz", - "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", + "version": "1.5.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@emnapi/runtime/-/runtime-1.5.0.tgz", + "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", "dev": true, "license": "MIT", "optional": true, @@ -692,9 +692,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.0.4", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz", - "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==", + "version": "1.1.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", "dev": true, "license": "MIT", "optional": true, @@ -850,9 +850,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.33.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@eslint/js/-/js-9.33.0.tgz", - "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", + "version": "9.34.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@eslint/js/-/js-9.34.0.tgz", + "integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1730,16 +1730,16 @@ } }, "node_modules/@jest/console": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/console/-/console-30.0.5.tgz", - "integrity": "sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/console/-/console-30.1.1.tgz", + "integrity": "sha512-f7TGqR1k4GtN5pyFrKmq+ZVndesiwLU33yDpJIGMS9aW+j6hKjue7ljeAdznBsH9kAnxUWe2Y+Y3fLV/FJt3gA==", "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", - "jest-message-util": "30.0.5", + "jest-message-util": "30.1.0", "jest-util": "30.0.5", "slash": "^3.0.0" }, @@ -1748,17 +1748,17 @@ } }, "node_modules/@jest/core": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/core/-/core-30.0.5.tgz", - "integrity": "sha512-fKD0OulvRsXF1hmaFgHhVJzczWzA1RXMMo9LTPuFXo9q/alDbME3JIyWYqovWsUBWSoBcsHaGPSLF9rz4l9Qeg==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/core/-/core-30.1.1.tgz", + "integrity": "sha512-3ncU9peZ3D2VdgRkdZtUceTrDgX5yiDRwAFjtxNfU22IiZrpVWlv/FogzDLYSJQptQGfFo3PcHK86a2oG6WUGg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.5", + "@jest/console": "30.1.1", "@jest/pattern": "30.0.1", - "@jest/reporters": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", + "@jest/reporters": "30.1.1", + "@jest/test-result": "30.1.1", + "@jest/transform": "30.1.1", "@jest/types": "30.0.5", "@types/node": "*", "ansi-escapes": "^4.3.2", @@ -1767,18 +1767,18 @@ "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-changed-files": "30.0.5", - "jest-config": "30.0.5", - "jest-haste-map": "30.0.5", - "jest-message-util": "30.0.5", + "jest-config": "30.1.1", + "jest-haste-map": "30.1.0", + "jest-message-util": "30.1.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.5", - "jest-resolve-dependencies": "30.0.5", - "jest-runner": "30.0.5", - "jest-runtime": "30.0.5", - "jest-snapshot": "30.0.5", + "jest-resolve": "30.1.0", + "jest-resolve-dependencies": "30.1.1", + "jest-runner": "30.1.1", + "jest-runtime": "30.1.1", + "jest-snapshot": "30.1.1", "jest-util": "30.0.5", - "jest-validate": "30.0.5", - "jest-watcher": "30.0.5", + "jest-validate": "30.1.0", + "jest-watcher": "30.1.1", "micromatch": "^4.0.8", "pretty-format": "30.0.5", "slash": "^3.0.0" @@ -1822,13 +1822,13 @@ } }, "node_modules/@jest/environment": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/environment/-/environment-30.0.5.tgz", - "integrity": "sha512-aRX7WoaWx1oaOkDQvCWImVQ8XNtdv5sEWgk4gxR6NXb7WBUnL5sRak4WRzIQRZ1VTWPvV4VI4mgGjNL9TeKMYA==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/environment/-/environment-30.1.1.tgz", + "integrity": "sha512-yWHbU+3j7ehQE+NRpnxRvHvpUhoohIjMePBbIr8lfe0cWVb0WeTf80DNux1GPJa18CDHiIU5DtksGUfxcDE+Rw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/fake-timers": "30.0.5", + "@jest/fake-timers": "30.1.1", "@jest/types": "30.0.5", "@types/node": "*", "jest-mock": "30.0.5" @@ -1838,43 +1838,43 @@ } }, "node_modules/@jest/expect": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/expect/-/expect-30.0.5.tgz", - "integrity": "sha512-6udac8KKrtTtC+AXZ2iUN/R7dp7Ydry+Fo6FPFnDG54wjVMnb6vW/XNlf7Xj8UDjAE3aAVAsR4KFyKk3TCXmTA==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/expect/-/expect-30.1.1.tgz", + "integrity": "sha512-3vHIHsF+qd3D8FU2c7U5l3rg1fhDwAYcGyHyZAi94YIlTwcJ+boNhRyJf373cl4wxbOX+0Q7dF40RTrTFTSuig==", "dev": true, "license": "MIT", "dependencies": { - "expect": "30.0.5", - "jest-snapshot": "30.0.5" + "expect": "30.1.1", + "jest-snapshot": "30.1.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/expect-utils/-/expect-utils-30.0.5.tgz", - "integrity": "sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/expect-utils/-/expect-utils-30.1.1.tgz", + "integrity": "sha512-5YUHr27fpJ64dnvtu+tt11ewATynrHkGYD+uSFgRr8V2eFJis/vEXgToyLwccIwqBihVfz9jwio+Zr1ab1Zihw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1" + "@jest/get-type": "30.1.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/fake-timers/-/fake-timers-30.0.5.tgz", - "integrity": "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/fake-timers/-/fake-timers-30.1.1.tgz", + "integrity": "sha512-fK/25dNgBNYPw3eLi2CRs57g1H04qBAFNMsUY3IRzkfx/m4THe0E1zF+yGQBOMKKc2XQVdc9EYbJ4hEm7/2UtA==", "dev": true, "license": "MIT", "dependencies": { "@jest/types": "30.0.5", "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", - "jest-message-util": "30.0.5", + "jest-message-util": "30.1.0", "jest-mock": "30.0.5", "jest-util": "30.0.5" }, @@ -1883,9 +1883,9 @@ } }, "node_modules/@jest/get-type": { - "version": "30.0.1", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/get-type/-/get-type-30.0.1.tgz", - "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==", + "version": "30.1.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", "dev": true, "license": "MIT", "engines": { @@ -1893,14 +1893,14 @@ } }, "node_modules/@jest/globals": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/globals/-/globals-30.0.5.tgz", - "integrity": "sha512-7oEJT19WW4oe6HR7oLRvHxwlJk2gev0U9px3ufs8sX9PoD1Eza68KF0/tlN7X0dq/WVsBScXQGgCldA1V9Y/jA==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/globals/-/globals-30.1.1.tgz", + "integrity": "sha512-NNUUkHT2TU/xztZl6r1UXvJL+zvCwmZsQDmK69fVHHcB9fBtlu3FInnzOve/ZoyKnWY8JXWJNT+Lkmu1+ubXUA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.5", - "@jest/expect": "30.0.5", + "@jest/environment": "30.1.1", + "@jest/expect": "30.1.1", "@jest/types": "30.0.5", "jest-mock": "30.0.5" }, @@ -1923,16 +1923,16 @@ } }, "node_modules/@jest/reporters": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/reporters/-/reporters-30.0.5.tgz", - "integrity": "sha512-mafft7VBX4jzED1FwGC1o/9QUM2xebzavImZMeqnsklgcyxBto8mV4HzNSzUrryJ+8R9MFOM3HgYuDradWR+4g==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/reporters/-/reporters-30.1.1.tgz", + "integrity": "sha512-Hb2Bq80kahOC6Sv2waEaH1rEU6VdFcM6WHaRBWQF9tf30+nJHxhl/Upbgo9+25f0mOgbphxvbwSMjSgy9gW/FA==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", + "@jest/console": "30.1.1", + "@jest/test-result": "30.1.1", + "@jest/transform": "30.1.1", "@jest/types": "30.0.5", "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", @@ -1946,9 +1946,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "30.0.5", + "jest-message-util": "30.1.0", "jest-util": "30.0.5", - "jest-worker": "30.0.5", + "jest-worker": "30.1.0", "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" @@ -1979,9 +1979,9 @@ } }, "node_modules/@jest/snapshot-utils": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/snapshot-utils/-/snapshot-utils-30.0.5.tgz", - "integrity": "sha512-XcCQ5qWHLvi29UUrowgDFvV4t7ETxX91CbDczMnoqXPOIcZOxyNdSjm6kV5XMc8+HkxfRegU/MUmnTbJRzGrUQ==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/snapshot-utils/-/snapshot-utils-30.1.1.tgz", + "integrity": "sha512-TkVBc9wuN22TT8hESRFmjjg/xIMu7z0J3UDYtIRydzCqlLPTB7jK1DDBKdnTUZ4zL3z3rnPpzV6rL1Uzh87sXg==", "dev": true, "license": "MIT", "dependencies": { @@ -2010,13 +2010,13 @@ } }, "node_modules/@jest/test-result": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/test-result/-/test-result-30.0.5.tgz", - "integrity": "sha512-wPyztnK0gbDMQAJZ43tdMro+qblDHH1Ru/ylzUo21TBKqt88ZqnKKK2m30LKmLLoKtR2lxdpCC/P3g1vfKcawQ==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/test-result/-/test-result-30.1.1.tgz", + "integrity": "sha512-bMdj7fNu8iZuBPSnbVir5ezvWmVo4jrw7xDE+A33Yb3ENCoiJK9XgOLgal+rJ9XSKjsL7aPUMIo87zhN7I5o2w==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.5", + "@jest/console": "30.1.1", "@jest/types": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" @@ -2026,15 +2026,15 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/test-sequencer/-/test-sequencer-30.0.5.tgz", - "integrity": "sha512-Aea/G1egWoIIozmDD7PBXUOxkekXl7ueGzrsGGi1SbeKgQqCYCIf+wfbflEbf2LiPxL8j2JZGLyrzZagjvW4YQ==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/test-sequencer/-/test-sequencer-30.1.1.tgz", + "integrity": "sha512-yruRdLXSA3HYD/MTNykgJ6VYEacNcXDFRMqKVAwlYegmxICUiT/B++CNuhJnYJzKYks61iYnjVsMwbUqmmAYJg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.0.5", + "@jest/test-result": "30.1.1", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", + "jest-haste-map": "30.1.0", "slash": "^3.0.0" }, "engines": { @@ -2042,9 +2042,9 @@ } }, "node_modules/@jest/transform": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/transform/-/transform-30.0.5.tgz", - "integrity": "sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@jest/transform/-/transform-30.1.1.tgz", + "integrity": "sha512-PHIA2AbAASBfk6evkNifvmx9lkOSkmvaQoO6VSpuL8+kQqDMHeDoJ7RU3YP1wWAMD7AyQn9UL5iheuFYCC4lqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2056,7 +2056,7 @@ "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", + "jest-haste-map": "30.1.0", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", "micromatch": "^4.0.8", @@ -2184,9 +2184,9 @@ } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.17.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@modelcontextprotocol/sdk/-/sdk-1.17.3.tgz", - "integrity": "sha512-JPwUKWSsbzx+DLFznf/QZ32Qa+ptfbUlHhRLrBQBAFu9iI1iYvizM4p+zhhRDceSsPutXp4z+R/HPVphlIiclg==", + "version": "1.17.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@modelcontextprotocol/sdk/-/sdk-1.17.4.tgz", + "integrity": "sha512-zq24hfuAmmlNZvik0FLI58uE5sriN0WWsQzIlYnzSuKDAHFqJtBFrl/LfB1NLgJT5Y7dEBzaX4yAKqOPrcetaw==", "license": "MIT", "dependencies": { "ajv": "^6.12.6", @@ -2723,9 +2723,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.3.tgz", - "integrity": "sha512-UmTdvXnLlqQNOCJnyksjPs1G4GqXNGW1LrzCe8+8QoaLhhDeTXYBgJ3k6x61WIhlHX2U+VzEJ55TtIjR/HTySA==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.49.0.tgz", + "integrity": "sha512-rlKIeL854Ed0e09QGYFlmDNbka6I3EQFw7iZuugQjMb11KMpJCLPFL4ZPbMfaEhLADEL1yx0oujGkBQ7+qW3eA==", "cpu": [ "arm" ], @@ -2736,9 +2736,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.3.tgz", - "integrity": "sha512-8NoxqLpXm7VyeI0ocidh335D6OKT0UJ6fHdnIxf3+6oOerZZc+O7r+UhvROji6OspyPm+rrIdb1gTXtVIqn+Sg==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.49.0.tgz", + "integrity": "sha512-cqPpZdKUSQYRtLLr6R4X3sD4jCBO1zUmeo3qrWBCqYIeH8Q3KRL4F3V7XJ2Rm8/RJOQBZuqzQGWPjjvFUcYa/w==", "cpu": [ "arm64" ], @@ -2749,9 +2749,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.3.tgz", - "integrity": "sha512-csnNavqZVs1+7/hUKtgjMECsNG2cdB8F7XBHP6FfQjqhjF8rzMzb3SLyy/1BG7YSfQ+bG75Ph7DyedbUqwq1rA==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.49.0.tgz", + "integrity": "sha512-99kMMSMQT7got6iYX3yyIiJfFndpojBmkHfTc1rIje8VbjhmqBXE+nb7ZZP3A5skLyujvT0eIUCUsxAe6NjWbw==", "cpu": [ "arm64" ], @@ -2762,9 +2762,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.3.tgz", - "integrity": "sha512-r2MXNjbuYabSIX5yQqnT8SGSQ26XQc8fmp6UhlYJd95PZJkQD1u82fWP7HqvGUf33IsOC6qsiV+vcuD4SDP6iw==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.49.0.tgz", + "integrity": "sha512-y8cXoD3wdWUDpjOLMKLx6l+NFz3NlkWKcBCBfttUn+VGSfgsQ5o/yDUGtzE9HvsodkP0+16N0P4Ty1VuhtRUGg==", "cpu": [ "x64" ], @@ -2775,9 +2775,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.3.tgz", - "integrity": "sha512-uluObTmgPJDuJh9xqxyr7MV61Imq+0IvVsAlWyvxAaBSNzCcmZlhfYcRhCdMaCsy46ccZa7vtDDripgs9Jkqsw==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.49.0.tgz", + "integrity": "sha512-3mY5Pr7qv4GS4ZvWoSP8zha8YoiqrU+e0ViPvB549jvliBbdNLrg2ywPGkgLC3cmvN8ya3za+Q2xVyT6z+vZqA==", "cpu": [ "arm64" ], @@ -2788,9 +2788,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.3.tgz", - "integrity": "sha512-AVJXEq9RVHQnejdbFvh1eWEoobohUYN3nqJIPI4mNTMpsyYN01VvcAClxflyk2HIxvLpRcRggpX1m9hkXkpC/A==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.49.0.tgz", + "integrity": "sha512-C9KzzOAQU5gU4kG8DTk+tjdKjpWhVWd5uVkinCwwFub2m7cDYLOdtXoMrExfeBmeRy9kBQMkiyJ+HULyF1yj9w==", "cpu": [ "x64" ], @@ -2801,9 +2801,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.3.tgz", - "integrity": "sha512-byyflM+huiwHlKi7VHLAYTKr67X199+V+mt1iRgJenAI594vcmGGddWlu6eHujmcdl6TqSNnvqaXJqZdnEWRGA==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.49.0.tgz", + "integrity": "sha512-OVSQgEZDVLnTbMq5NBs6xkmz3AADByCWI4RdKSFNlDsYXdFtlxS59J+w+LippJe8KcmeSSM3ba+GlsM9+WwC1w==", "cpu": [ "arm" ], @@ -2814,9 +2814,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.3.tgz", - "integrity": "sha512-aLm3NMIjr4Y9LklrH5cu7yybBqoVCdr4Nvnm8WB7PKCn34fMCGypVNpGK0JQWdPAzR/FnoEoFtlRqZbBBLhVoQ==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.49.0.tgz", + "integrity": "sha512-ZnfSFA7fDUHNa4P3VwAcfaBLakCbYaxCk0jUnS3dTou9P95kwoOLAMlT3WmEJDBCSrOEFFV0Y1HXiwfLYJuLlA==", "cpu": [ "arm" ], @@ -2827,9 +2827,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.3.tgz", - "integrity": "sha512-VtilE6eznJRDIoFOzaagQodUksTEfLIsvXymS+UdJiSXrPW7Ai+WG4uapAc3F7Hgs791TwdGh4xyOzbuzIZrnw==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.49.0.tgz", + "integrity": "sha512-Z81u+gfrobVK2iV7GqZCBfEB1y6+I61AH466lNK+xy1jfqFLiQ9Qv716WUM5fxFrYxwC7ziVdZRU9qvGHkYIJg==", "cpu": [ "arm64" ], @@ -2840,9 +2840,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.3.tgz", - "integrity": "sha512-dG3JuS6+cRAL0GQ925Vppafi0qwZnkHdPeuZIxIPXqkCLP02l7ka+OCyBoDEv8S+nKHxfjvjW4OZ7hTdHkx8/w==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.49.0.tgz", + "integrity": "sha512-zoAwS0KCXSnTp9NH/h9aamBAIve0DXeYpll85shf9NJ0URjSTzzS+Z9evmolN+ICfD3v8skKUPyk2PO0uGdFqg==", "cpu": [ "arm64" ], @@ -2853,9 +2853,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.3.tgz", - "integrity": "sha512-iU8DxnxEKJptf8Vcx4XvAUdpkZfaz0KWfRrnIRrOndL0SvzEte+MTM7nDH4A2Now4FvTZ01yFAgj6TX/mZl8hQ==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.49.0.tgz", + "integrity": "sha512-2QyUyQQ1ZtwZGiq0nvODL+vLJBtciItC3/5cYN8ncDQcv5avrt2MbKt1XU/vFAJlLta5KujqyHdYtdag4YEjYQ==", "cpu": [ "loong64" ], @@ -2879,9 +2879,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.3.tgz", - "integrity": "sha512-VrQZp9tkk0yozJoQvQcqlWiqaPnLM6uY1qPYXvukKePb0fqaiQtOdMJSxNFUZFsGw5oA5vvVokjHrx8a9Qsz2A==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.49.0.tgz", + "integrity": "sha512-k9aEmOWt+mrMuD3skjVJSSxHckJp+SiFzFG+v8JLXbc/xi9hv2icSkR3U7uQzqy+/QbbYY7iNB9eDTwrELo14g==", "cpu": [ "ppc64" ], @@ -2892,9 +2892,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.3.tgz", - "integrity": "sha512-uf2eucWSUb+M7b0poZ/08LsbcRgaDYL8NCGjUeFMwCWFwOuFcZ8D9ayPl25P3pl+D2FH45EbHdfyUesQ2Lt9wA==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.49.0.tgz", + "integrity": "sha512-rDKRFFIWJ/zJn6uk2IdYLc09Z7zkE5IFIOWqpuU0o6ZpHcdniAyWkwSUWE/Z25N/wNDmFHHMzin84qW7Wzkjsw==", "cpu": [ "riscv64" ], @@ -2905,9 +2905,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.3.tgz", - "integrity": "sha512-7tnUcDvN8DHm/9ra+/nF7lLzYHDeODKKKrh6JmZejbh1FnCNZS8zMkZY5J4sEipy2OW1d1Ncc4gNHUd0DLqkSg==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.49.0.tgz", + "integrity": "sha512-FkkhIY/hYFVnOzz1WeV3S9Bd1h0hda/gRqvZCMpHWDHdiIHn6pqsY3b5eSbvGccWHMQ1uUzgZTKS4oGpykf8Tw==", "cpu": [ "riscv64" ], @@ -2918,9 +2918,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.3.tgz", - "integrity": "sha512-MUpAOallJim8CsJK+4Lc9tQzlfPbHxWDrGXZm2z6biaadNpvh3a5ewcdat478W+tXDoUiHwErX/dOql7ETcLqg==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.49.0.tgz", + "integrity": "sha512-gRf5c+A7QiOG3UwLyOOtyJMD31JJhMjBvpfhAitPAoqZFcOeK3Kc1Veg1z/trmt+2P6F/biT02fU19GGTS529A==", "cpu": [ "s390x" ], @@ -2931,9 +2931,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.3.tgz", - "integrity": "sha512-F42IgZI4JicE2vM2PWCe0N5mR5vR0gIdORPqhGQ32/u1S1v3kLtbZ0C/mi9FFk7C5T0PgdeyWEPajPjaUpyoKg==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.49.0.tgz", + "integrity": "sha512-BR7+blScdLW1h/2hB/2oXM+dhTmpW3rQt1DeSiCP9mc2NMMkqVgjIN3DDsNpKmezffGC9R8XKVOLmBkRUcK/sA==", "cpu": [ "x64" ], @@ -2944,9 +2944,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.3.tgz", - "integrity": "sha512-oLc+JrwwvbimJUInzx56Q3ujL3Kkhxehg7O1gWAYzm8hImCd5ld1F2Gry5YDjR21MNb5WCKhC9hXgU7rRlyegQ==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.49.0.tgz", + "integrity": "sha512-hDMOAe+6nX3V5ei1I7Au3wcr9h3ktKzDvF2ne5ovX8RZiAHEtX1A5SNNk4zt1Qt77CmnbqT+upb/umzoPMWiPg==", "cpu": [ "x64" ], @@ -2957,9 +2957,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.3.tgz", - "integrity": "sha512-lOrQ+BVRstruD1fkWg9yjmumhowR0oLAAzavB7yFSaGltY8klttmZtCLvOXCmGE9mLIn8IBV/IFrQOWz5xbFPg==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.49.0.tgz", + "integrity": "sha512-wkNRzfiIGaElC9kXUT+HLx17z7D0jl+9tGYRKwd8r7cUqTL7GYAvgUY++U2hK6Ar7z5Z6IRRoWC8kQxpmM7TDA==", "cpu": [ "arm64" ], @@ -2970,9 +2970,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.3.tgz", - "integrity": "sha512-vvrVKPRS4GduGR7VMH8EylCBqsDcw6U+/0nPDuIjXQRbHJc6xOBj+frx8ksfZAh6+Fptw5wHrN7etlMmQnPQVg==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.49.0.tgz", + "integrity": "sha512-gq5aW/SyNpjp71AAzroH37DtINDcX1Qw2iv9Chyz49ZgdOP3NV8QCyKZUrGsYX9Yyggj5soFiRCgsL3HwD8TdA==", "cpu": [ "ia32" ], @@ -2983,9 +2983,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.3.tgz", - "integrity": "sha512-fi3cPxCnu3ZeM3EwKZPgXbWoGzm2XHgB/WShKI81uj8wG0+laobmqy5wbgEwzstlbLu4MyO8C19FyhhWseYKNQ==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.49.0.tgz", + "integrity": "sha512-gEtqFbzmZLFk2xKh7g0Rlo8xzho8KrEFEkzvHbfUGkrgXOpZ4XagQ6n+wIZFNh1nTb8UD16J4nFSFKXYgnbdBg==", "cpu": [ "x64" ], @@ -4035,9 +4035,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.34.40", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@sinclair/typebox/-/typebox-0.34.40.tgz", - "integrity": "sha512-gwBNIP8ZAYev/ORDWW0QvxdwPXwxBtLsdsJgSc7eDIRt8ubP+rxUBzPsrwnu16fgEF8Bx4lh/+mvQvJzcTM6Kw==", + "version": "0.34.41", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@sinclair/typebox/-/typebox-0.34.41.tgz", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", "dev": true, "license": "MIT" }, @@ -4294,17 +4294,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.40.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.40.0.tgz", - "integrity": "sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==", + "version": "8.41.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.41.0.tgz", + "integrity": "sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.40.0", - "@typescript-eslint/type-utils": "8.40.0", - "@typescript-eslint/utils": "8.40.0", - "@typescript-eslint/visitor-keys": "8.40.0", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/type-utils": "8.41.0", + "@typescript-eslint/utils": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -4318,22 +4318,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.40.0", + "@typescript-eslint/parser": "^8.41.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.40.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/parser/-/parser-8.40.0.tgz", - "integrity": "sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==", + "version": "8.41.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/parser/-/parser-8.41.0.tgz", + "integrity": "sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.40.0", - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/typescript-estree": "8.40.0", - "@typescript-eslint/visitor-keys": "8.40.0", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "debug": "^4.3.4" }, "engines": { @@ -4349,14 +4349,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.40.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/project-service/-/project-service-8.40.0.tgz", - "integrity": "sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==", + "version": "8.41.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/project-service/-/project-service-8.41.0.tgz", + "integrity": "sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.40.0", - "@typescript-eslint/types": "^8.40.0", + "@typescript-eslint/tsconfig-utils": "^8.41.0", + "@typescript-eslint/types": "^8.41.0", "debug": "^4.3.4" }, "engines": { @@ -4371,14 +4371,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.40.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/scope-manager/-/scope-manager-8.40.0.tgz", - "integrity": "sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==", + "version": "8.41.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/scope-manager/-/scope-manager-8.41.0.tgz", + "integrity": "sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/visitor-keys": "8.40.0" + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4389,9 +4389,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.40.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.40.0.tgz", - "integrity": "sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==", + "version": "8.41.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz", + "integrity": "sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==", "dev": true, "license": "MIT", "engines": { @@ -4406,15 +4406,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.40.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/type-utils/-/type-utils-8.40.0.tgz", - "integrity": "sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==", + "version": "8.41.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/type-utils/-/type-utils-8.41.0.tgz", + "integrity": "sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/typescript-estree": "8.40.0", - "@typescript-eslint/utils": "8.40.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/utils": "8.41.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -4431,9 +4431,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.40.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/types/-/types-8.40.0.tgz", - "integrity": "sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==", + "version": "8.41.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/types/-/types-8.41.0.tgz", + "integrity": "sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==", "dev": true, "license": "MIT", "engines": { @@ -4445,16 +4445,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.40.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/typescript-estree/-/typescript-estree-8.40.0.tgz", - "integrity": "sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==", + "version": "8.41.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz", + "integrity": "sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.40.0", - "@typescript-eslint/tsconfig-utils": "8.40.0", - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/visitor-keys": "8.40.0", + "@typescript-eslint/project-service": "8.41.0", + "@typescript-eslint/tsconfig-utils": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -4487,16 +4487,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.40.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/utils/-/utils-8.40.0.tgz", - "integrity": "sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==", + "version": "8.41.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/utils/-/utils-8.41.0.tgz", + "integrity": "sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.40.0", - "@typescript-eslint/types": "8.40.0", - "@typescript-eslint/typescript-estree": "8.40.0" + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4530,13 +4530,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.40.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/visitor-keys/-/visitor-keys-8.40.0.tgz", - "integrity": "sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==", + "version": "8.41.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/@typescript-eslint/visitor-keys/-/visitor-keys-8.41.0.tgz", + "integrity": "sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.40.0", + "@typescript-eslint/types": "8.41.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -5324,13 +5324,13 @@ } }, "node_modules/babel-jest": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/babel-jest/-/babel-jest-30.0.5.tgz", - "integrity": "sha512-mRijnKimhGDMsizTvBTWotwNpzrkHr+VvZUQBof2AufXKB8NXrL1W69TG20EvOz7aevx6FTJIaBuBkYxS8zolg==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/babel-jest/-/babel-jest-30.1.1.tgz", + "integrity": "sha512-1bZfC/V03qBCzASvZpNFhx3Ouj6LgOd4KFJm4br/fYOS+tSSvVCE61QmcAVbMTwq/GoB7KN4pzGMoyr9cMxSvQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/transform": "30.0.5", + "@jest/transform": "30.1.1", "@types/babel__core": "^7.20.5", "babel-plugin-istanbul": "^7.0.0", "babel-preset-jest": "30.0.1", @@ -5699,9 +5699,9 @@ "license": "MIT" }, "node_modules/browserslist": { - "version": "4.25.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/browserslist/-/browserslist-4.25.3.tgz", - "integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==", + "version": "4.25.4", + "resolved": "https://artifact.devsnc.com/repository/npm-all/browserslist/-/browserslist-4.25.4.tgz", + "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==", "dev": true, "funding": [ { @@ -5719,8 +5719,8 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001735", - "electron-to-chromium": "^1.5.204", + "caniuse-lite": "^1.0.30001737", + "electron-to-chromium": "^1.5.211", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, @@ -5907,9 +5907,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001735", - "resolved": "https://artifact.devsnc.com/repository/npm-all/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz", - "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==", + "version": "1.0.30001737", + "resolved": "https://artifact.devsnc.com/repository/npm-all/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz", + "integrity": "sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==", "dev": true, "funding": [ { @@ -6798,9 +6798,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.207", - "resolved": "https://artifact.devsnc.com/repository/npm-all/electron-to-chromium/-/electron-to-chromium-1.5.207.tgz", - "integrity": "sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw==", + "version": "1.5.211", + "resolved": "https://artifact.devsnc.com/repository/npm-all/electron-to-chromium/-/electron-to-chromium-1.5.211.tgz", + "integrity": "sha512-IGBvimJkotaLzFnwIVgW9/UD/AOJ2tByUmeOrtqBfACSbAw5b1G0XpvdaieKyc7ULmbwXVx+4e4Be8pOPBrYkw==", "dev": true, "license": "ISC" }, @@ -6954,9 +6954,9 @@ } }, "node_modules/eslint": { - "version": "9.33.0", - "resolved": "https://artifact.devsnc.com/repository/npm-all/eslint/-/eslint-9.33.0.tgz", - "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", + "version": "9.34.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/eslint/-/eslint-9.34.0.tgz", + "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", @@ -6965,7 +6965,7 @@ "@eslint/config-helpers": "^0.3.1", "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.33.0", + "@eslint/js": "9.34.0", "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -7348,12 +7348,12 @@ } }, "node_modules/eventsource-parser": { - "version": "3.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/eventsource-parser/-/eventsource-parser-3.0.5.tgz", - "integrity": "sha512-bSRG85ZrMdmWtm7qkF9He9TNRzc/Bm99gEJMaQoHJ9E6Kv9QBbsldh2oMj7iXmYNEAVvNgvv5vPorG6W+XtBhQ==", + "version": "3.0.6", + "resolved": "https://artifact.devsnc.com/repository/npm-all/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", "license": "MIT", "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/evp_bytestokey": { @@ -7419,16 +7419,16 @@ } }, "node_modules/expect": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/expect/-/expect-30.0.5.tgz", - "integrity": "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/expect/-/expect-30.1.1.tgz", + "integrity": "sha512-OKe7cdic4qbfWd/CcgwJvvCrNX2KWfuMZee9AfJHL1gTYmvqjBjZG1a2NwfhspBzxzlXwsN75WWpKTYfsJpBxg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "30.0.5", - "@jest/get-type": "30.0.1", - "jest-matcher-utils": "30.0.5", - "jest-message-util": "30.0.5", + "@jest/expect-utils": "30.1.1", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.1.1", + "jest-message-util": "30.1.0", "jest-mock": "30.0.5", "jest-util": "30.0.5" }, @@ -7575,9 +7575,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://artifact.devsnc.com/repository/npm-all/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "version": "3.1.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", @@ -8862,16 +8862,16 @@ } }, "node_modules/jest": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest/-/jest-30.0.5.tgz", - "integrity": "sha512-y2mfcJywuTUkvLm2Lp1/pFX8kTgMO5yyQGq/Sk/n2mN7XWYp4JsCZ/QXW34M8YScgk8bPZlREH04f6blPnoHnQ==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest/-/jest-30.1.1.tgz", + "integrity": "sha512-yC3JvpP/ZcAZX5rYCtXO/g9k6VTCQz0VFE2v1FpxytWzUqfDtu0XL/pwnNvptzYItvGwomh1ehomRNMOyhCJKw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.0.5", + "@jest/core": "30.1.1", "@jest/types": "30.0.5", "import-local": "^3.2.0", - "jest-cli": "30.0.5" + "jest-cli": "30.1.1" }, "bin": { "jest": "bin/jest.js" @@ -8904,26 +8904,26 @@ } }, "node_modules/jest-circus": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-circus/-/jest-circus-30.0.5.tgz", - "integrity": "sha512-h/sjXEs4GS+NFFfqBDYT7y5Msfxh04EwWLhQi0F8kuWpe+J/7tICSlswU8qvBqumR3kFgHbfu7vU6qruWWBPug==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-circus/-/jest-circus-30.1.1.tgz", + "integrity": "sha512-M3Vd4x5wD7eSJspuTvRF55AkOOBndRxgW3gqQBDlFvbH3X+ASdi8jc+EqXEeAFd/UHulVYIlC4XKJABOhLw6UA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.5", - "@jest/expect": "30.0.5", - "@jest/test-result": "30.0.5", + "@jest/environment": "30.1.1", + "@jest/expect": "30.1.1", + "@jest/test-result": "30.1.1", "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", - "jest-each": "30.0.5", - "jest-matcher-utils": "30.0.5", - "jest-message-util": "30.0.5", - "jest-runtime": "30.0.5", - "jest-snapshot": "30.0.5", + "jest-each": "30.1.0", + "jest-matcher-utils": "30.1.1", + "jest-message-util": "30.1.0", + "jest-runtime": "30.1.1", + "jest-snapshot": "30.1.1", "jest-util": "30.0.5", "p-limit": "^3.1.0", "pretty-format": "30.0.5", @@ -8936,21 +8936,21 @@ } }, "node_modules/jest-cli": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-cli/-/jest-cli-30.0.5.tgz", - "integrity": "sha512-Sa45PGMkBZzF94HMrlX4kUyPOwUpdZasaliKN3mifvDmkhLYqLLg8HQTzn6gq7vJGahFYMQjXgyJWfYImKZzOw==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-cli/-/jest-cli-30.1.1.tgz", + "integrity": "sha512-xm9llxuh5OoI5KZaYzlMhklryHBwg9LZy/gEaaMlXlxb+cZekGNzukU0iblbDo3XOBuN6N0CgK4ykgNRYSEb6g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.0.5", - "@jest/test-result": "30.0.5", + "@jest/core": "30.1.1", + "@jest/test-result": "30.1.1", "@jest/types": "30.0.5", "chalk": "^4.1.2", "exit-x": "^0.2.2", "import-local": "^3.2.0", - "jest-config": "30.0.5", + "jest-config": "30.1.1", "jest-util": "30.0.5", - "jest-validate": "30.0.5", + "jest-validate": "30.1.0", "yargs": "^17.7.2" }, "bin": { @@ -9010,31 +9010,31 @@ } }, "node_modules/jest-config": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-config/-/jest-config-30.0.5.tgz", - "integrity": "sha512-aIVh+JNOOpzUgzUnPn5FLtyVnqc3TQHVMupYtyeURSb//iLColiMIR8TxCIDKyx9ZgjKnXGucuW68hCxgbrwmA==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-config/-/jest-config-30.1.1.tgz", + "integrity": "sha512-xuPGUGDw+9fPPnGmddnLnHS/mhKUiJOW7K65vErYmglEPKq65NKwSRchkQ7iv6gqjs2l+YNEsAtbsplxozdOWg==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", - "@jest/get-type": "30.0.1", + "@jest/get-type": "30.1.0", "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.0.5", + "@jest/test-sequencer": "30.1.1", "@jest/types": "30.0.5", - "babel-jest": "30.0.5", + "babel-jest": "30.1.1", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", "glob": "^10.3.10", "graceful-fs": "^4.2.11", - "jest-circus": "30.0.5", + "jest-circus": "30.1.1", "jest-docblock": "30.0.1", - "jest-environment-node": "30.0.5", + "jest-environment-node": "30.1.1", "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.5", - "jest-runner": "30.0.5", + "jest-resolve": "30.1.0", + "jest-runner": "30.1.1", "jest-util": "30.0.5", - "jest-validate": "30.0.5", + "jest-validate": "30.1.0", "micromatch": "^4.0.8", "parse-json": "^5.2.0", "pretty-format": "30.0.5", @@ -9078,14 +9078,14 @@ } }, "node_modules/jest-diff": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-diff/-/jest-diff-30.0.5.tgz", - "integrity": "sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-diff/-/jest-diff-30.1.1.tgz", + "integrity": "sha512-LUU2Gx8EhYxpdzTR6BmjL1ifgOAQJQELTHOiPv9KITaKjZvJ9Jmgigx01tuZ49id37LorpGc9dPBPlXTboXScw==", "dev": true, "license": "MIT", "dependencies": { "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.0.1", + "@jest/get-type": "30.1.0", "chalk": "^4.1.2", "pretty-format": "30.0.5" }, @@ -9107,13 +9107,13 @@ } }, "node_modules/jest-each": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-each/-/jest-each-30.0.5.tgz", - "integrity": "sha512-dKjRsx1uZ96TVyejD3/aAWcNKy6ajMaN531CwWIsrazIqIoXI9TnnpPlkrEYku/8rkS3dh2rbH+kMOyiEIv0xQ==", + "version": "30.1.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-each/-/jest-each-30.1.0.tgz", + "integrity": "sha512-A+9FKzxPluqogNahpCv04UJvcZ9B3HamqpDNWNKDjtxVRYB8xbZLFuCr8JAJFpNp83CA0anGQFlpQna9Me+/tQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", + "@jest/get-type": "30.1.0", "@jest/types": "30.0.5", "chalk": "^4.1.2", "jest-util": "30.0.5", @@ -9124,28 +9124,28 @@ } }, "node_modules/jest-environment-node": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-environment-node/-/jest-environment-node-30.0.5.tgz", - "integrity": "sha512-ppYizXdLMSvciGsRsMEnv/5EFpvOdXBaXRBzFUDPWrsfmog4kYrOGWXarLllz6AXan6ZAA/kYokgDWuos1IKDA==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-environment-node/-/jest-environment-node-30.1.1.tgz", + "integrity": "sha512-IaMoaA6saxnJimqCppUDqKck+LKM0Jg+OxyMUIvs1yGd2neiC22o8zXo90k04+tO+49OmgMR4jTgM5e4B0S62Q==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.5", - "@jest/fake-timers": "30.0.5", + "@jest/environment": "30.1.1", + "@jest/fake-timers": "30.1.1", "@jest/types": "30.0.5", "@types/node": "*", "jest-mock": "30.0.5", "jest-util": "30.0.5", - "jest-validate": "30.0.5" + "jest-validate": "30.1.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-haste-map": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-haste-map/-/jest-haste-map-30.0.5.tgz", - "integrity": "sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg==", + "version": "30.1.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-haste-map/-/jest-haste-map-30.1.0.tgz", + "integrity": "sha512-JLeM84kNjpRkggcGpQLsV7B8W4LNUWz7oDNVnY1Vjj22b5/fAb3kk3htiD+4Na8bmJmjJR7rBtS2Rmq/NEcADg==", "dev": true, "license": "MIT", "dependencies": { @@ -9156,7 +9156,7 @@ "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", "jest-util": "30.0.5", - "jest-worker": "30.0.5", + "jest-worker": "30.1.0", "micromatch": "^4.0.8", "walker": "^1.0.8" }, @@ -9168,13 +9168,13 @@ } }, "node_modules/jest-leak-detector": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-leak-detector/-/jest-leak-detector-30.0.5.tgz", - "integrity": "sha512-3Uxr5uP8jmHMcsOtYMRB/zf1gXN3yUIc+iPorhNETG54gErFIiUhLvyY/OggYpSMOEYqsmRxmuU4ZOoX5jpRFg==", + "version": "30.1.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-leak-detector/-/jest-leak-detector-30.1.0.tgz", + "integrity": "sha512-AoFvJzwxK+4KohH60vRuHaqXfWmeBATFZpzpmzNmYTtmRMiyGPVhkXpBqxUQunw+dQB48bDf4NpUs6ivVbRv1g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", + "@jest/get-type": "30.1.0", "pretty-format": "30.0.5" }, "engines": { @@ -9182,15 +9182,15 @@ } }, "node_modules/jest-matcher-utils": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-matcher-utils/-/jest-matcher-utils-30.0.5.tgz", - "integrity": "sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-matcher-utils/-/jest-matcher-utils-30.1.1.tgz", + "integrity": "sha512-SuH2QVemK48BNTqReti6FtjsMPFsSOD/ZzRxU1TttR7RiRsRSe78d03bb4Cx6D4bQC/80Q8U4VnaaAH9FlbZ9w==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", + "@jest/get-type": "30.1.0", "chalk": "^4.1.2", - "jest-diff": "30.0.5", + "jest-diff": "30.1.1", "pretty-format": "30.0.5" }, "engines": { @@ -9198,9 +9198,9 @@ } }, "node_modules/jest-message-util": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-message-util/-/jest-message-util-30.0.5.tgz", - "integrity": "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA==", + "version": "30.1.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-message-util/-/jest-message-util-30.1.0.tgz", + "integrity": "sha512-HizKDGG98cYkWmaLUHChq4iN+oCENohQLb7Z5guBPumYs+/etonmNFlg1Ps6yN9LTPyZn+M+b/9BbnHx3WTMDg==", "dev": true, "license": "MIT", "dependencies": { @@ -9262,18 +9262,18 @@ } }, "node_modules/jest-resolve": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-resolve/-/jest-resolve-30.0.5.tgz", - "integrity": "sha512-d+DjBQ1tIhdz91B79mywH5yYu76bZuE96sSbxj8MkjWVx5WNdt1deEFRONVL4UkKLSrAbMkdhb24XN691yDRHg==", + "version": "30.1.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-resolve/-/jest-resolve-30.1.0.tgz", + "integrity": "sha512-hASe7D/wRtZw8Cm607NrlF7fi3HWC5wmA5jCVc2QjQAB2pTwP9eVZILGEi6OeSLNUtE1zb04sXRowsdh5CUjwA==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", + "jest-haste-map": "30.1.0", "jest-pnp-resolver": "^1.2.3", "jest-util": "30.0.5", - "jest-validate": "30.0.5", + "jest-validate": "30.1.0", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" }, @@ -9282,30 +9282,30 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.5.tgz", - "integrity": "sha512-/xMvBR4MpwkrHW4ikZIWRttBBRZgWK4d6xt3xW1iRDSKt4tXzYkMkyPfBnSCgv96cpkrctfXs6gexeqMYqdEpw==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-resolve-dependencies/-/jest-resolve-dependencies-30.1.1.tgz", + "integrity": "sha512-tRtaaoH8Ws1Gn1o/9pedt19dvVgr81WwdmvJSP9Ow3amOUOP2nN9j94u5jC9XlIfa2Q1FQKIWWQwL4ajqsjCGQ==", "dev": true, "license": "MIT", "dependencies": { "jest-regex-util": "30.0.1", - "jest-snapshot": "30.0.5" + "jest-snapshot": "30.1.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-runner": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-runner/-/jest-runner-30.0.5.tgz", - "integrity": "sha512-JcCOucZmgp+YuGgLAXHNy7ualBx4wYSgJVWrYMRBnb79j9PD0Jxh0EHvR5Cx/r0Ce+ZBC4hCdz2AzFFLl9hCiw==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-runner/-/jest-runner-30.1.1.tgz", + "integrity": "sha512-ATe6372SOfJvCRExtCAr06I4rGujwFdKg44b6i7/aOgFnULwjxzugJ0Y4AnG+jeSeQi8dU7R6oqLGmsxRUbErQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.5", - "@jest/environment": "30.0.5", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", + "@jest/console": "30.1.1", + "@jest/environment": "30.1.1", + "@jest/test-result": "30.1.1", + "@jest/transform": "30.1.1", "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", @@ -9313,15 +9313,15 @@ "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-docblock": "30.0.1", - "jest-environment-node": "30.0.5", - "jest-haste-map": "30.0.5", - "jest-leak-detector": "30.0.5", - "jest-message-util": "30.0.5", - "jest-resolve": "30.0.5", - "jest-runtime": "30.0.5", + "jest-environment-node": "30.1.1", + "jest-haste-map": "30.1.0", + "jest-leak-detector": "30.1.0", + "jest-message-util": "30.1.0", + "jest-resolve": "30.1.0", + "jest-runtime": "30.1.1", "jest-util": "30.0.5", - "jest-watcher": "30.0.5", - "jest-worker": "30.0.5", + "jest-watcher": "30.1.1", + "jest-worker": "30.1.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -9330,18 +9330,18 @@ } }, "node_modules/jest-runtime": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-runtime/-/jest-runtime-30.0.5.tgz", - "integrity": "sha512-7oySNDkqpe4xpX5PPiJTe5vEa+Ak/NnNz2bGYZrA1ftG3RL3EFlHaUkA1Cjx+R8IhK0Vg43RML5mJedGTPNz3A==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-runtime/-/jest-runtime-30.1.1.tgz", + "integrity": "sha512-7sOyR0Oekw4OesQqqBHuYJRB52QtXiq0NNgLRzVogiMSxKCMiliUd6RrXHCnG5f12Age/ggidCBiQftzcA9XKw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.5", - "@jest/fake-timers": "30.0.5", - "@jest/globals": "30.0.5", + "@jest/environment": "30.1.1", + "@jest/fake-timers": "30.1.1", + "@jest/globals": "30.1.1", "@jest/source-map": "30.0.1", - "@jest/test-result": "30.0.5", - "@jest/transform": "30.0.5", + "@jest/test-result": "30.1.1", + "@jest/transform": "30.1.1", "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", @@ -9349,12 +9349,12 @@ "collect-v8-coverage": "^1.0.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.5", - "jest-message-util": "30.0.5", + "jest-haste-map": "30.1.0", + "jest-message-util": "30.1.0", "jest-mock": "30.0.5", "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.5", - "jest-snapshot": "30.0.5", + "jest-resolve": "30.1.0", + "jest-snapshot": "30.1.1", "jest-util": "30.0.5", "slash": "^3.0.0", "strip-bom": "^4.0.0" @@ -9364,9 +9364,9 @@ } }, "node_modules/jest-snapshot": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-snapshot/-/jest-snapshot-30.0.5.tgz", - "integrity": "sha512-T00dWU/Ek3LqTp4+DcW6PraVxjk28WY5Ua/s+3zUKSERZSNyxTqhDXCWKG5p2HAJ+crVQ3WJ2P9YVHpj1tkW+g==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-snapshot/-/jest-snapshot-30.1.1.tgz", + "integrity": "sha512-7/iBEzoJqEt2TjkQY+mPLHP8cbPhLReZVkkxjTMzIzoTC4cZufg7HzKo/n9cIkXKj2LG0x3mmBHsZto+7TOmFg==", "dev": true, "license": "MIT", "dependencies": { @@ -9375,18 +9375,18 @@ "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.0.5", - "@jest/get-type": "30.0.1", - "@jest/snapshot-utils": "30.0.5", - "@jest/transform": "30.0.5", + "@jest/expect-utils": "30.1.1", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.1.1", + "@jest/transform": "30.1.1", "@jest/types": "30.0.5", "babel-preset-current-node-syntax": "^1.1.0", "chalk": "^4.1.2", - "expect": "30.0.5", + "expect": "30.1.1", "graceful-fs": "^4.2.11", - "jest-diff": "30.0.5", - "jest-matcher-utils": "30.0.5", - "jest-message-util": "30.0.5", + "jest-diff": "30.1.1", + "jest-matcher-utils": "30.1.1", + "jest-message-util": "30.1.0", "jest-util": "30.0.5", "pretty-format": "30.0.5", "semver": "^7.7.2", @@ -9444,13 +9444,13 @@ } }, "node_modules/jest-validate": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-validate/-/jest-validate-30.0.5.tgz", - "integrity": "sha512-ouTm6VFHaS2boyl+k4u+Qip4TSH7Uld5tyD8psQ8abGgt2uYYB8VwVfAHWHjHc0NWmGGbwO5h0sCPOGHHevefw==", + "version": "30.1.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-validate/-/jest-validate-30.1.0.tgz", + "integrity": "sha512-7P3ZlCFW/vhfQ8pE7zW6Oi4EzvuB4sgR72Q1INfW9m0FGo0GADYlPwIkf4CyPq7wq85g+kPMtPOHNAdWHeBOaA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", + "@jest/get-type": "30.1.0", "@jest/types": "30.0.5", "camelcase": "^6.3.0", "chalk": "^4.1.2", @@ -9475,13 +9475,13 @@ } }, "node_modules/jest-watcher": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-watcher/-/jest-watcher-30.0.5.tgz", - "integrity": "sha512-z9slj/0vOwBDBjN3L4z4ZYaA+pG56d6p3kTUhFRYGvXbXMWhXmb/FIxREZCD06DYUwDKKnj2T80+Pb71CQ0KEg==", + "version": "30.1.1", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-watcher/-/jest-watcher-30.1.1.tgz", + "integrity": "sha512-CrAQ73LlaS6KGQQw6NBi71g7qvP7scy+4+2c0jKX6+CWaYg85lZiig5nQQVTsS5a5sffNPL3uxXnaE9d7v9eQg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.0.5", + "@jest/test-result": "30.1.1", "@jest/types": "30.0.5", "@types/node": "*", "ansi-escapes": "^4.3.2", @@ -9495,9 +9495,9 @@ } }, "node_modules/jest-worker": { - "version": "30.0.5", - "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-worker/-/jest-worker-30.0.5.tgz", - "integrity": "sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ==", + "version": "30.1.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/jest-worker/-/jest-worker-30.1.0.tgz", + "integrity": "sha512-uvWcSjlwAAgIu133Tt77A05H7RIk3Ho8tZL50bQM2AkvLdluw9NG48lRCl3Dt+MOH719n/0nnb5YxUwcuJiKRA==", "dev": true, "license": "MIT", "dependencies": { @@ -10095,12 +10095,12 @@ "license": "MIT" }, "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://artifact.devsnc.com/repository/npm-all/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "version": "0.30.18", + "resolved": "https://artifact.devsnc.com/repository/npm-all/magic-string/-/magic-string-0.30.18.tgz", + "integrity": "sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==", "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/make-dir": { @@ -11695,9 +11695,9 @@ } }, "node_modules/rollup": { - "version": "4.46.3", - "resolved": "https://artifact.devsnc.com/repository/npm-all/rollup/-/rollup-4.46.3.tgz", - "integrity": "sha512-RZn2XTjXb8t5g13f5YclGoilU/kwT696DIkY3sywjdZidNSi3+vseaQov7D7BZXVJCPv3pDWUN69C78GGbXsKw==", + "version": "4.49.0", + "resolved": "https://artifact.devsnc.com/repository/npm-all/rollup/-/rollup-4.49.0.tgz", + "integrity": "sha512-3IVq0cGJ6H7fKXXEdVt+RcYvRCt8beYY9K1760wGQwSAHZcS9eot1zDG5axUbcp/kWRi5zKIIDX8MoKv/TzvZA==", "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -11710,26 +11710,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.46.3", - "@rollup/rollup-android-arm64": "4.46.3", - "@rollup/rollup-darwin-arm64": "4.46.3", - "@rollup/rollup-darwin-x64": "4.46.3", - "@rollup/rollup-freebsd-arm64": "4.46.3", - "@rollup/rollup-freebsd-x64": "4.46.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.46.3", - "@rollup/rollup-linux-arm-musleabihf": "4.46.3", - "@rollup/rollup-linux-arm64-gnu": "4.46.3", - "@rollup/rollup-linux-arm64-musl": "4.46.3", - "@rollup/rollup-linux-loongarch64-gnu": "4.46.3", - "@rollup/rollup-linux-ppc64-gnu": "4.46.3", - "@rollup/rollup-linux-riscv64-gnu": "4.46.3", - "@rollup/rollup-linux-riscv64-musl": "4.46.3", - "@rollup/rollup-linux-s390x-gnu": "4.46.3", - "@rollup/rollup-linux-x64-gnu": "4.46.3", - "@rollup/rollup-linux-x64-musl": "4.46.3", - "@rollup/rollup-win32-arm64-msvc": "4.46.3", - "@rollup/rollup-win32-ia32-msvc": "4.46.3", - "@rollup/rollup-win32-x64-msvc": "4.46.3", + "@rollup/rollup-android-arm-eabi": "4.49.0", + "@rollup/rollup-android-arm64": "4.49.0", + "@rollup/rollup-darwin-arm64": "4.49.0", + "@rollup/rollup-darwin-x64": "4.49.0", + "@rollup/rollup-freebsd-arm64": "4.49.0", + "@rollup/rollup-freebsd-x64": "4.49.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.49.0", + "@rollup/rollup-linux-arm-musleabihf": "4.49.0", + "@rollup/rollup-linux-arm64-gnu": "4.49.0", + "@rollup/rollup-linux-arm64-musl": "4.49.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.49.0", + "@rollup/rollup-linux-ppc64-gnu": "4.49.0", + "@rollup/rollup-linux-riscv64-gnu": "4.49.0", + "@rollup/rollup-linux-riscv64-musl": "4.49.0", + "@rollup/rollup-linux-s390x-gnu": "4.49.0", + "@rollup/rollup-linux-x64-gnu": "4.49.0", + "@rollup/rollup-linux-x64-musl": "4.49.0", + "@rollup/rollup-win32-arm64-msvc": "4.49.0", + "@rollup/rollup-win32-ia32-msvc": "4.49.0", + "@rollup/rollup-win32-x64-msvc": "4.49.0", "fsevents": "~2.3.2" } }, diff --git a/package.json b/package.json index 2bf2abd..6bcc81d 100644 --- a/package.json +++ b/package.json @@ -49,12 +49,12 @@ } }, "dependencies": { - "@modelcontextprotocol/sdk": "1.17.3", + "@modelcontextprotocol/sdk": "1.17.4", "@servicenow/sdk": "3.0.3", "zod": "^3.25.74" }, "devDependencies": { - "@eslint/js": "^9.33.0", + "@eslint/js": "^9.34.0", "@rollup/plugin-commonjs": "^28.0.6", "@rollup/plugin-eslint": "^9.0.5", "@rollup/plugin-json": "^6.0.1", @@ -63,11 +63,11 @@ "@rollup/plugin-typescript": "^12.1.4", "@types/jest": "^30.0.0", "@types/node": "^24.3.0", - "@typescript-eslint/eslint-plugin": "^8.40.0", - "@typescript-eslint/parser": "^8.40.0", - "eslint": "^9.33.0", - "jest": "^30.0.5", - "rollup": "^4.46.3", + "@typescript-eslint/eslint-plugin": "^8.41.0", + "@typescript-eslint/parser": "^8.41.0", + "eslint": "^9.34.0", + "jest": "^30.1.1", + "rollup": "^4.49.0", "rollup-plugin-node-builtins": "^2.1.2", "rollup-plugin-sourcemaps": "^0.6.3", "ts-jest": "^29.4.1", From ded979d0d62ce281038add44c5a22de8ad21f9c5 Mon Sep 17 00:00:00 2001 From: modesty Date: Fri, 29 Aug 2025 16:35:23 -0700 Subject: [PATCH 3/3] feat: add auto auth validation if env variable is set, update readme --- README.md | 30 +++++- doc/prd-fluent-mcp-servicenow.md | 2 +- src/server/fluentInstanceAuth.ts | 149 ++++++++++++++++++++++++++ src/server/fluentMCPServer.ts | 6 ++ src/utils/fluentAppValidator.ts | 2 +- test/utils/fluentAppValidator.test.ts | 2 +- 6 files changed, 183 insertions(+), 8 deletions(-) create mode 100644 src/server/fluentInstanceAuth.ts diff --git a/README.md b/README.md index edc2db4..17f3b43 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,11 @@ Resources can be accessed by direct URI or through the `resources/list` method. "mcpServers": { "fluent-mcp": { "command": "npx", - "args": ["-y", "@modesty/fluent-mcp"] + "args": ["-y", "@modesty/fluent-mcp"], + "env": { + "SN_INSTANCE_URL": "http://localhost:8080", + "SN_AUTH_TYPE": "oauth" + } } } } @@ -116,7 +120,11 @@ Resources can be accessed by direct URI or through the `resources/list` method. "fluent-mcp": { "type": "stdio", "command": "npx", - "args": ["-y", "@modesty/fluent-mcp"] + "args": ["-y", "@modesty/fluent-mcp"], + "env": { + "SN_INSTANCE_URL": "http://localhost:8080", + "SN_AUTH_TYPE": "oauth" + } } } } @@ -132,7 +140,11 @@ Add MCP server configuration in Cursor settings: "mcpServers": { "fluent-mcp": { "command": "npx", - "args": ["-y", "@modesty/fluent-mcp"] + "args": ["-y", "@modesty/fluent-mcp"], + "env": { + "SN_INSTANCE_URL": "http://localhost:8080", + "SN_AUTH_TYPE": "oauth" + } } } } @@ -147,7 +159,11 @@ Add MCP server configuration in Cursor settings: "mcpServers": { "fluent-mcp": { "command": "npx", - "args": ["-y", "@modesty/fluent-mcp"] + "args": ["-y", "@modesty/fluent-mcp"], + "env": { + "SN_INSTANCE_URL": "http://localhost:8080", + "SN_AUTH_TYPE": "oauth" + } } } } @@ -167,7 +183,11 @@ Configure in `~/.gemini/settings.json` or `./.gemini/settings.json`: "args": [ "-y", "@modesty/fluent-mcp" - ] + ], + "env": { + "SN_INSTANCE_URL": "http://localhost:8080", + "SN_AUTH_TYPE": "oauth" + } } } } diff --git a/doc/prd-fluent-mcp-servicenow.md b/doc/prd-fluent-mcp-servicenow.md index 61febbe..565d037 100644 --- a/doc/prd-fluent-mcp-servicenow.md +++ b/doc/prd-fluent-mcp-servicenow.md @@ -52,7 +52,7 @@ Fluent MCP is a Model Context Protocol (MCP) server that provides ServiceNow SDK 2.3 Init command: prerequisites: - Change the current working directory to the directory where you want to create the ServiceNow application. - - The current working directory must not already contain a ServiceNow application, meaning it must not contain a `now.config.json` file, and it's package.json (if exists) must not have dependencies for `@servicenow/now-sdk` or `@servicenow/now-sdk-cli`. Otherwise, return a message indicating that the current directory already contains a Fluent (ServiceNow SDK) application, and tell the user current scope name and package name. + - The current working directory must not already contain a ServiceNow application, meaning it must not contain a `now.config.json` file, and it's package.json (if exists) must not have dependencies for `@servicenow/sdk`. Otherwise, return a message indicating that the current directory already contains a Fluent (ServiceNow SDK) application, and tell the user current scope name and package name. - working directory handling: - If working directory is provided - If the provided working directory doesn't exist, create it, save it as the working directory for the session, then move onto command execution diff --git a/src/server/fluentInstanceAuth.ts b/src/server/fluentInstanceAuth.ts new file mode 100644 index 0000000..f619229 --- /dev/null +++ b/src/server/fluentInstanceAuth.ts @@ -0,0 +1,149 @@ +import logger from '../utils/logger.js'; +import { CLIExecutor, NodeProcessRunner } from '../tools/cliCommandTools.js'; + +/** + * Perform auto-authentication validation if environment is configured + * Rules: + * 1. If SN_INSTANCE_URL is not set -> log and exit + * 2. If SN_INSTANCE_URL, SN_USERNAME, SN_PASSWORD, SN_AUTH_TYPE are all set -> validate via `npx now-sdk auth --list` + * - If a profile's host matches SN_INSTANCE_URL and default = Yes -> validated + * - If host matches but default = No -> run `npx now-sdk auth --use ` + * - Otherwise -> run `npx now-sdk auth --add --type ` and + * for basic type, interactively provide username/password + */ +export async function autoValidateAuthIfConfigured(): Promise { + const instUrl = process.env.SN_INSTANCE_URL?.trim(); + const authType = process.env.SN_AUTH_TYPE?.trim() || 'oauth'; + if (!instUrl) { + logger.info('Auto-auth skipped: SN_INSTANCE_URL is not set'); + return; + } + + // const username = process.env.SN_USERNAME?.trim(); + // const password = process.env.SN_PASSWORD?.trim(); + + // if (!username || !password) { + // logger.info('Auto-auth skipped: SN_USERNAME/SN_PASSWORD/SN_AUTH_TYPE not fully set'); + // return; + // } + + try { + // Validate existing auth profiles + const listRes = await runNowSdk(['auth', '--list']); + const profiles = parseAuthListOutput(listRes.stdout); + + const matched = profiles.find((p) => urlsEqual(p.host, instUrl)); + if (matched) { + if (matched.defaultYes) { + logger.info('Auto-auth validated: default profile matches SN_INSTANCE_URL', { + alias: matched.alias, + host: matched.host, + }); + return; + } + + // Found matching host but not default, switch default + const useAlias = matched.alias; + const useRes = await runNowSdk(['auth', '--use', useAlias]); + if (useRes.exitCode === 0) { + logger.info('Auto-auth updated: switched default profile', { alias: useAlias, host: matched.host }); + } else { + logger.warn('Auto-auth warning: failed to switch default profile with now-sdk auth --use', { + alias: useAlias, + stderr: useRes.stderr, + }); + } + return; + } + + // Not found -> attempt to add credentials (simplified) + const alias = deriveAliasFromInstance(instUrl); + // logger.info('Auto-auth attempting to add credentials', { alias, host: instUrl, type: authType }); + + // const addRes = await runNowSdk(['auth', '--add', instUrl, '--type', authType, '--alias', alias]); + // if (addRes.exitCode === 0) { + // logger.info('Auto-auth added credentials', { alias, host: instUrl, type: authType }); + + // // Try to set as default + // const useRes = await runNowSdk(['auth', '--use', alias]); + // if (useRes.exitCode === 0) { + // logger.info('Auto-auth set as default', { alias }); + // } + // } else { + logger.notice('not authenticated, please run following shell command to login:', { + shellCommand: `npx @servicenow/sdk auth --add ${instUrl} --type ${authType} --alias ${alias}` + }); + // } + } catch (error) { + logger.warn('Auto-auth failed to validate', { error: error instanceof Error ? error.message : String(error) }); + logger.notice('please run following shell command to login:', { + shellCommand: `npx @servicenow/sdk auth --add ${instUrl} --type ${authType}` + }); + } +} + +/** Normalize and compare two URLs/hosts for equality (ignores trailing slashes) */ +function urlsEqual(a?: string, b?: string): boolean { + if (!a || !b) return false; + const na = a.trim().replace(/\/?$/, ''); + const nb = b.trim().replace(/\/?$/, ''); + return na === nb; +} + +/** Derive a reasonable alias name from SN_INSTANCE_URL or raw value */ +function deriveAliasFromInstance(instUrl: string): string { + try { + const u = new URL(instUrl); + // Use hostname if available; fallback to sanitized string + return u.hostname || instUrl.replace(/\W+/g, '-'); + } catch { + return instUrl.replace(/\W+/g, '-'); + } +} + +/** Parse `now-sdk auth --list` stdout into profiles */ +function parseAuthListOutput(stdout: string): { alias: string; host?: string; type?: string; username?: string; defaultYes: boolean }[] { + const profiles: { alias: string; host?: string; type?: string; username?: string; defaultYes: boolean }[] = []; + if (!stdout) return profiles; + + const lines = stdout.split(/\r?\n/); + let current: { alias: string; host?: string; type?: string; username?: string; defaultYes: boolean } | null = null; + + for (const raw of lines) { + const line = raw.trimEnd(); + const headerMatch = line.match(/^\*?\[([^\]]+)\]/); + if (headerMatch) { + if (current) profiles.push(current); + // Mark default if the header starts with '*' + const isDefault = line.trimStart().startsWith('*'); + current = { alias: headerMatch[1], defaultYes: isDefault }; + continue; + } + const kvMatch = line.match(/^\s*([a-zA-Z_]+)\s*=\s*(.*)$/); + if (kvMatch && current) { + const key = kvMatch[1].toLowerCase(); + const value = kvMatch[2].trim(); + if (key === 'host') current.host = value; + else if (key === 'type') current.type = value; + else if (key === 'username') current.username = value; + else if (key === 'default') current.defaultYes = /^yes$/i.test(value); + } + } + if (current) profiles.push(current); + return profiles; +} + +// Use CLIExecutor for consistent process handling +const executor = new CLIExecutor(new NodeProcessRunner()); + +/** Run a now-sdk command and capture stdout/stderr without interaction */ +async function runNowSdk(subArgs: string[]): Promise<{ stdout: string; stderr: string; exitCode: number }> { + // Try direct binary first, fallback to npx with ServiceNow SDK package + // let result = await executor.execute('now-sdk', subArgs); + // if (result.exitCode !== 0) { + const result = await executor.execute('npx', ['@servicenow/sdk', ...subArgs]); + // } + return { stdout: result.output, stderr: result.error?.message || '', exitCode: result.exitCode }; +} + + diff --git a/src/server/fluentMCPServer.ts b/src/server/fluentMCPServer.ts index 58bd11c..4f5c06c 100644 --- a/src/server/fluentMCPServer.ts +++ b/src/server/fluentMCPServer.ts @@ -21,6 +21,7 @@ import logger from '../utils/logger.js'; import { ToolsManager } from '../tools/toolsManager.js'; import { ResourceManager } from '../res/resourceManager.js'; import { PromptManager } from '../prompts/promptManager.js'; +import { autoValidateAuthIfConfigured } from './fluentInstanceAuth.js'; /** * Implementation of the Model Context Protocol server for Fluent (ServiceNow SDK) @@ -93,6 +94,8 @@ export class FluentMcpServer { } } + // auto-auth code moved to fluentInstanceAuto.ts + /** * Request the list of roots from the client * This is called after the client sends the notifications/initialized notification @@ -393,6 +396,9 @@ export class FluentMcpServer { this.status = ServerStatus.RUNNING; loggingManager.logServerStarted(); + // Kick off auto-auth validation asynchronously (non-blocking) + await autoValidateAuthIfConfigured(); + // The root list will be requested when the client sends the notifications/initialized notification // This ensures proper timing according to the MCP protocol } catch (error) { diff --git a/src/utils/fluentAppValidator.ts b/src/utils/fluentAppValidator.ts index 08cfe97..16c1e37 100644 --- a/src/utils/fluentAppValidator.ts +++ b/src/utils/fluentAppValidator.ts @@ -49,7 +49,7 @@ export class FluentAppValidator { const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); const dependencies = { ...packageJson.dependencies, ...packageJson.devDependencies }; - if (dependencies['@servicenow/now-sdk'] || dependencies['@servicenow/now-sdk-cli']) { + if (dependencies['@servicenow/sdk']) { return { hasApp: true, packageName: packageJson.name || 'unknown', diff --git a/test/utils/fluentAppValidator.test.ts b/test/utils/fluentAppValidator.test.ts index 9709f39..d7e8542 100644 --- a/test/utils/fluentAppValidator.test.ts +++ b/test/utils/fluentAppValidator.test.ts @@ -74,7 +74,7 @@ describe("FluentAppValidator", () => { return JSON.stringify({ name: "test-app", dependencies: { - "@servicenow/now-sdk": "^1.0.0", + "@servicenow/sdk": "3.0.3", }, }); }